Skip to content

Instantly share code, notes, and snippets.

@chalkpe
Last active February 10, 2018 16:05
Show Gist options
  • Save chalkpe/5d2e6a5104f855173426e575b8ce823a to your computer and use it in GitHub Desktop.
Save chalkpe/5d2e6a5104f855173426e575b8ce823a to your computer and use it in GitHub Desktop.

x, y, z를 인자로 받아서 z를 반환하는 함수를 SKI combinator로 구현하기

  T[λx.λy.λz.z]
= T[λx.T[λy.λz.z]]      (by 5)
= T[λx.T[(K T[λz.z])]   (by 3)
= T[λx.T[(K I)]         (by 4)
= T[λx.(T[K] T[I])]     (by 2)
= T[λx.(K I)]           (by 1)
= (S T[λx.K] T[λx.I])   (by 6)
= (S (K K) (K I))       (by 3)
let K = x => y => x
let S = x => y => z => x(z)(y(z))
let I = S(K)(K) //x => x

let f = S(K(K))(K(I)) //x => y => z => z

/*
= (x => y => z => x(z)(y(z))) ((a => b => a)(p => q => p)) ((m => n => m)(l => l))
= (x => y => z => x(z)(y(z))) ((a => b => a)(p => q => p)) (n => l => l)
= (x => y => z => x(z)(y(z))) (b => p => q => p) (n => l => l)
= (y => z => (b => p => q => p)(z)(y(z))) (n => l => l)
= (z => (b => p => q => p)(z)((n => l => l)(z)))
= (z => (p => q => p)(l => l))
= (z => (q => l => l))
= (x => y => z => z)
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment