我开始学习λ演算,需要在Erlang中实现I、S、K组合子。当然,S、K、I代表:
S = λxyz.xz(yz) K = λxy.x I = λx.x
我没有问题理解纸上的I=SKK变换(如此处所示:To prove SKK and II are beta equivalent, lambda calculus),但是似乎当涉及到函数式语言和高阶函数时,我就不理解了……
我已经成功实现了I和K(假设在模块
S = λxyz.xz(yz) K = λxy.x I = λx.x
我没有问题理解纸上的I=SKK变换(如此处所示:To prove SKK and II are beta equivalent, lambda calculus),但是似乎当涉及到函数式语言和高阶函数时,我就不理解了……
我已经成功实现了I和K(假设在模块
test
中):i(X) -> X.
k(X) -> fun(Y) -> X end.
此外,我知道如何运行 K x (K x) (SKK x = K x (K x))。
kxk(X) -> (k(X))(k(X)).
但我无法写出S combinator。我尝试了:
s(X) -> fun (Y) -> fun(Z) -> X,Z (Y,Z) end end.
但是,我仍然无法将SKK x转换为x。
我尝试像这样运行它:
skkx(X) -> s((k((k(X))))).
我需要帮助,因为我完全不知道该怎么做。