假设我在 Racket 中有一个未类型化的 Y 组合器实现。
#lang racket
(define Y
((λ (f)
(f f))
(λ (z)
(λ (f)
(f (λ (x) (((z z) f) x)))))))
(define factorial
(Y (λ (recursive-factorial)
(λ (x)
(if (<= x 0)
1
(* x (recursive-factorial (- x 1))))))))
(factorial 5)
如何将这个转换为 Typed/Racket 代码?
注:我认为这不是写 Y 组合子的规范方式,但它应该是等效的。