y(WIP)
TLS
里最终抽象出来的 Y
组合子长这样:
(define Y
(lambda (le)
((lambda (f) (f f))
(lambda (f)
(le (lambda (x) ((f f) x)))))))
里边稍微 apply
一层就跟经典的长得一样了:
(define Y
(lambda (le)
((lambda (f)
(le (lambda (x) ((f f) x))))
(lambda (f)
(le (lambda (x) ((f f) x)))))))
注意 (lambda (x) ((f f) x))
其实就是 (f f)
,这里为了惰性求值包了一层。
(define Y
(lambda (le)
((lambda (f)
(le (f f)))
(lambda (f)
(le (f f))))))
(define fact
(Y (lambda (fact1)
(lambda (n)
(cond
((= n 1) 1)
(else (* n (fact1 (sub1 n)))))))))
(fact 1)
(fact 2)
(fact 3)
(fact 5)
上述写法会无穷递归