-
-
Save 0x0dea/7652f8f75f64b2c5da59 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def λ | |
$. += 1 | |
proc.curry | |
end | |
# Convert a Ruby integer to a Church numeral. | |
def church n | |
n.times.reduce(λ { |_, x| x }) { |n| λ { |n, f, x| f[n[f][x]] }[n] } | |
end | |
# Undo the above for printing/verifying that this madness wasn't all for naught. | |
def unchurch p | |
p[-> n { n + 1 }][0] | |
end | |
Common = λ{|f|λ{|x|f[λ{|_|x[x][_]}]}[λ{|x|f[λ{|_|x[x][_]}]}]}[λ{|f,a,b,c,i|λ{|n| | |
n[λ{|x|λ{|a,b|b}}][λ{|a,b|a}]}[i][c][λ{|_|λ{|m,n|n[λ{|n,f,x|f[n[f][x]]}][m]}[λ{| | |
f|λ{|x|f[λ{|_|x[x][_]}]}[λ{|x|f[λ{|_|x[x][_]}]}]}[λ{|f,n|λ{|n|n[λ{|x|λ{|a,b|b}}][ | |
λ{|a,b|a}]}[n][λ{|a,b|a}][λ{|_|λ{|n|n[λ{|x|λ{|a,b|b}}][λ{|a,b|a}]}[λ{|n,f,x|n[λ{ | |
|g,h|h[g[f]]}][λ{|_|x}][λ{|u|u}]}[n]][λ{|a,b|b}][f[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{ | |
|_|x}][λ{|u|u}]}[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{|_|x}][λ{|u|u}]}[n]]]][_]}]}][λ{| | |
m,n|n[λ{|n,f,x|f[n[f][x]]}][m]}[a][b]][λ{|f,x|f[x]}][λ{|f,x|x}]][f[λ{|f|λ{|x|f[λ{ | |
|_|x[x][_]}]}[λ{|x|f[λ{|_|x[x][_]}]}]}[λ{|f,n,m|λ{|n|n[λ{|x|λ{|a,b|b}}][λ{|a,b|a | |
}]}[λ{|m,n|n[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{|_|x}][λ{|u|u}]}][m]}[n][m]][n][λ{|_| | |
f[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{|_|x}][λ{|u|u}]}[n]][λ{|n,f,x|f[n[f][x]]}[m]][_] | |
}]}][a][λ{|f,x|x}]][λ{|f|λ{|x|f[λ{|_|x[x][_]}]}[λ{|x|f[λ{|_|x[x][_]}]}]}[λ{|f,n, | |
m|λ{|n|n[λ{|x|λ{|a,b|b}}][λ{|a,b|a}]}[λ{|m,n|n[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{|_| | |
x}][λ{|u|u}]}][m]}[n][m]][n][λ{|_|f[λ{|n,f,x|n[λ{|g,h|h[g[f]]}][λ{|_|x}][λ{|u|u} | |
]}[n]][λ{|n,f,x|f[n[f][x]]}[m]][_]}]}][b][λ{|f,x|x}]][c][λ{|n,f,x|n[λ{|g,h|h[g[f | |
]]}][λ{|_|x}][λ{|u|u}]}[i]]][_]}]}] | |
a = church 10 | |
b = church 17 | |
c = church 8 # bit width of calculations | |
puts "Common bits: #{unchurch Common[a, b, λ { |_, x| x }, c]}" | |
puts "Created #$. lambdas!" # ^ Church zero |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment