Expressive Language
最近第一次领会了什么叫富于_表现力_的语言。
最近在看 EOPL, 做到1.17的时候发现让实现个排序。 很自然的,想到了 Haskell 官网上那段著名的伪快排*:
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
照葫芦画瓢来段 Scheme 版:
(define sort
(lambda (lon)
(if (null? lon)
'()
(append (sort (filter-in
(lambda (x)
(< x (car lon)))
(cdr lon)))
(list (car lon))
(sort (filter-in
(lambda (x)
(>= x (car lon)))
(cdr lon)))))))
这表现力差得大了点吧, -_-!
*: 为什么说是*伪*呢, 快排要求原地。参考这里