在The little schemer一书中,我们发现这个函数只支持长度小于或等于1的列表:
(((lambda (mk-length) ; A.
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l ) 0)
(else (add1 ((mk-length eternity ) (cdr l))))))))
'(1))
我想逐步学习,并想编写仅支持长度小于或等于2的列表的类似函数。
请不要通过提供如下代码来回答这个问题:
(((lambda (mk-length) ; B.
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l) 0 )
(else (add1((mk-length mk-length) (cdr l))))))))
'(a b c d))
因为这个函数支持任意长度。
而且我已经知道如何编写这样的函数:
(((lambda (mk-length) ; C.
(mk-length
(mk-length (mk-length eternity))))
(lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1 (length (cdr l))))))))
'(1 2)) ;;
实现我的目标。但是这段代码距离第一个代码片段不止一步。
也许,我不应该改变:
(lambda (mk-length) ; D.
(mk-length mk-length)