小陰謀家給出page 165以下的仍是功能長度。但這是如何工作的?它看起來像長度拉姆達被傳遞到MK-長度拉姆達,其與長度拉姆達本身作爲參數傳遞評估長度拉姆達。那麼,當(length (cdr l))
底部評估length
只是長度lambda本身。但是長度λ需要兩個curried參數:length
和l
。那麼(length (cdr l))
如何纔有意義呢?小策士:length0和MK-長度
((lambda (mk-length)
(mk-length mk-length))
(lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1
(length (cdr l))))))))
正確(在
eternity
功能潤色頁166的長度≤1使用);它沒有。它將'(lambda(l)...)'返回到'add1',從而導致錯誤;這就是爲什麼它是'length_0':它只適用於空列表。長度這個名字也是錯誤的,它應該被稱爲'mk-length' - 就像它在右邊一半那樣。 –