私はラムダ計算を学び始めており、Erlang で I、S、K コンビネータを実装する必要があります。もちろん、S、K、I は次の略です。
S = λxyz.xz(yz) K = λxy.x I = λx.x
紙の上で I=SKK 変換を理解するのに問題はありません (ここで提示されているように: SKK と II がベータ版であることを証明するには、ラムダ計算です) が、関数型言語と高次関数に関しては理解できないようです。 ..
私はなんとか 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))))).
私は完全に迷っているので、助けていただければ幸いです。