Skip to content

Instantly share code, notes, and snippets.

@nitrix
Forked from Solonarv/SKI.hs
Created October 31, 2018 20:55

Revisions

  1. @Solonarv Solonarv revised this gist Oct 31, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SKI.hs
    Original file line number Diff line number Diff line change
    @@ -7,5 +7,5 @@ reduce :: SKI -> SKI
    reduce (A (A (A S x) y) z) = reduce (A (A x z) (A y z))
    reduce (A (A K x) y) = reduce y
    reduce (A I x) = reduce x
    reduce a@(A f x) = let f' = reduce f in if f==f' then a else reduce a'
    reduce a@(A f x) = let f' = reduce f in if f==f' then a else reduce (A f' x)
    reduce a = a
  2. @Solonarv Solonarv revised this gist Oct 31, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SKI.hs
    Original file line number Diff line number Diff line change
    @@ -7,5 +7,5 @@ reduce :: SKI -> SKI
    reduce (A (A (A S x) y) z) = reduce (A (A x z) (A y z))
    reduce (A (A K x) y) = reduce y
    reduce (A I x) = reduce x
    reduce a@(A x y) = let a' = A (reduce x) (reduce y) in if a==a' then a else reduce a'
    reduce a@(A f x) = let f' = reduce f in if f==f' then a else reduce a'
    reduce a = a
  3. @Solonarv Solonarv created this gist Oct 31, 2018.
    11 changes: 11 additions & 0 deletions SKI.hs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    module SKI where

    data SKI = S | K | I | A SKI SKI
    deriving (Eq, Show)

    reduce :: SKI -> SKI
    reduce (A (A (A S x) y) z) = reduce (A (A x z) (A y z))
    reduce (A (A K x) y) = reduce y
    reduce (A I x) = reduce x
    reduce a@(A x y) = let a' = A (reduce x) (reduce y) in if a==a' then a else reduce a'
    reduce a = a