我開始學習lambda微積分,並且需要在Erlang中實現I,S,K組合器。 當然,S,K,I表示:Erlang中的S combinator
S = λxyz.xz(yz) K = λxy.x I = λx.x
我沒有問題,在紙上理解我= SKK轉換(如這裏介紹:To prove SKK and II are beta equivalent, lambda calculus),但它似乎說到我不明白功能性語言和高階功能...
我能夠做到我和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))))).
任何幫助,將不勝感激,因爲我完全失去了。
事實上,你的問題是純粹的符號上。如果你瞭解beta減少如何工作,那麼你一定理解這個想法。剩下的只是符號。 –