我试图在swift中进行SICP练习2.6,大概是church numerals
零在方案中定义为
(define zero (lambda (f) (lambda (x) x)))
转换为快速关闭我认为是
let zeroR = {(x:Int)->Int in return x}
let zero = {(f:(Int)->Int)->(Int)->Int in return zeroR}
但问题是在方案
中add-1的定义(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
我无法将此转换为快速关闭版本。有些想法?
感谢。
答案 0 :(得分:0)
我为zero
和add_1
写了以下两个函数:
func zero<T>(f: T -> T) -> T -> T {
return { x in x }
}
func add_1<T>(n: (T -> T) -> T -> T ) -> (T -> T) -> T -> T {
return { f in
return { x in
return f(n(f)(x))
}
}
}
现在,您可以定义one
,例如zero
和add_1
:
func one<T>(f: T -> T) -> T -> T {
return add_1(zero)(f)
}
也许这样的事情与你想要的一致?
如果你真的想使用闭包,它会看起来像这样,但它失去了使用泛型的能力:
let _zero: (Int -> Int) -> Int -> Int = { _ in
return { x in x }
}
let _add_1: ((Int -> Int) -> Int -> Int) -> (Int -> Int) -> Int -> Int = { n in
return { f in
return { x in
return f(n(f)(x))
}
}
}