【发布时间】:2011-10-17 06:52:50
【问题描述】:
我开始学习 lambda 演算,我需要在 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(让我们在模块 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 组合器。我试过了:
s(X) -> fun (Y) -> fun(Z) -> X,Z (Y,Z) end end.
但是,我仍然无法将 SKK x 转换为 x
我尝试这样运行它:
skkx(X) -> s((k((k(X))))).
任何帮助将不胜感激,因为我完全迷路了。
【问题讨论】:
-
确实,您的问题纯粹是符号问题。如果您了解 beta-reduction 的工作原理,那么您肯定会理解这个想法。其余的只是符号。
标签: lambda erlang lambda-calculus s-combinator