Recursion 如何做这个长度≤;不止一次?
我花了一天时间阅读166页的Recursion 如何做这个长度≤;不止一次?,recursion,scheme,y-combinator,the-little-schemer,anonymous-recursion,Recursion,Scheme,Y Combinator,The Little Schemer,Anonymous Recursion,我花了一天时间阅读166页的长度≤1在《小阴谋家》一书中;有以下代码: (((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) (cond ((null? l) 0) (else (add1 ((mk-length eternity) (cdr l)))))))) l) 其中l是(苹果)和永恒如下:
长度≤1
在《小阴谋家》一书中;有以下代码:
(((lambda (mk-length)
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l) 0)
(else (add1
((mk-length eternity)
(cdr l))))))))
l)
其中l
是(苹果)
和永恒
如下:
(define eternity
(lambda (x)
(eternity x)))
第166页(第四版)规定:
当我们应用mk length
一次时,我们得到length≤1
然后
我们可以不止一次这样做吗
但是我不知道如何获得
长度≤2
?假设l
是(苹果橙子)
,那么它将这样计算(注意mk length
绑定到(lambda(mk length)…)
函数本身:
(cond ((null? l) 0)
(else (add1 ((mk-length eternity) (cdr l)))))
==>
(add1 ((mk-length eternity) '(oranges)))
==>
(add1 ((lambda (l) (cond ((null? l) 0
(else (add1 ((eternity eternity) (cdr l))))))))
==>
(add1 (add1 ((eternity eternity) '())))
在这里,经过两个步骤,
永恒
最终被应用,但我们希望它调用mk length
。因此在原始函数中,如果我们用mk length
替换永恒
,那么我编写的最后一个步骤将包含(mk length mk length)
,而不是(永恒)
,允许继续计算。使用mk length
而不是eventure
这将是length≤∞代码>,而不是长度≤2
。我想我的回答是关于长度的≤2
特别是(即仅2个,不超过2个)。