Estoy empezando a aprender el cálculo lambda y necesito implementar los combinadores I, S, K en Erlang. Por supuesto, S, K, I significa:Combinador S en Erlang
S = λxyz.xz(yz) K = λxy.x I = λx.x
no tengo problemas para comprender la transformación I = SKK en papel (como se presenta aquí: To prove SKK and II are beta equivalent, lambda calculus) pero parece que no entiendo que cuando se trata de a los lenguajes funcionales y funciones de orden superior ...
que logró hacer I y K (que permite decir en el módulo test
):
i(X) -> X.
k(X) -> fun(Y) -> X end.
también sé cómo ejecutar K x (K x) (SKK x = K x (K x))
kxk(X) -> (k(X))(k(X)).
Pero no puedo entenderlo para escribir S combinator. Probé:
s(X) -> fun (Y) -> fun(Z) -> X,Z (Y,Z) end end.
Pero aún así, no soy capaz de transformar SKK x en x
intento funcionar de esta manera:
skkx(X) -> s((k((k(X))))).
se agradecería cualquier ayuda, como Estoy completamente perdido.
De hecho, el problema es puramente de notación. Si entiendes cómo funciona la reducción beta, entonces seguramente entenderás la idea. El resto es solo notación. –