Skip to content

Instantly share code, notes, and snippets.

@rgm
Last active November 10, 2023 21:33
Show Gist options
  • Save rgm/e670f333ae91553031a8 to your computer and use it in GitHub Desktop.
Save rgm/e670f333ae91553031a8 to your computer and use it in GitHub Desktop.
FizzBuzz in the untyped λ-calculus, as approximated by Ruby stabby procs. courtesy of @tomstuart.
-> k { -> f { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }]
} [-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }]
}[l]][x] [-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { ->
y { y } }] } [l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p {
p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][k][-> x { -> y { -> f {
f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> l { -> x { -> l {
-> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { ->
f { f[x][y] } } } [x][l]] } }[l][f[x]] } }] } }[-> f { -> x { f[-> y { x[x][y]
}] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { ->
n { -> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n {
n[-> n { -> p { p[- > x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y]
} } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[->
p { -> x { x } }][- > p { -> x { x } }]]] }][m] } }[m][n]] } }[m][n]][-> x { ->
l { -> x { -> x { - > y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y
{ -> f { f[x][y] } } } [x][l]] } }[f[-> n { -> p { -> x { p[n[p][x]] } }
}[m]][n]][m][x] }][-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x
{ -> y { x } }]] } } }][-> p { -> x { p[x] } }][-> p { -> x {
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] } }]][->
n { -> b { b }[-> n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-
> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m
{ -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x { -> y { y } } }][-> x {
-> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p {
-> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n {
-> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x {
-> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }] [m]
} }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x
} }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y }
}] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }]
}[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x {
x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x {
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]] } }]]][-> l { -> x { -> x { - >
y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
} [x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y
} }] [-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y {
-> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } } [-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y
} }][-> x { - > y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y {
-> f { f[x] [y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[- > l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y
} }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { -> y {
-> f { f[x] [y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[- > l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y
} }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f { f[x][y]
} } }[-> x { - > y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { - > p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m {
-> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }]
} }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n {
-> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { ->
p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x
{ x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]] [-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]]
} } }[- > n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[->
n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p {
-> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[->
m { - > n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x
} }] } } [-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> n
{ -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n {
-> p { - > x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { ->
n { n[- > m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p {
-> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]] [-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]]
} } }[- > n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] }
} }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] }
}[m]][- > p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x {
p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p {
-> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x {
p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] }
}][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } }
} [-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] }
} [m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x {
p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } } }][- >
x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x]
[y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n { n[-> x { -> x
{ -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x {
-> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x { - >
y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y
} }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p {
-> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { - >
p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p {
p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[- >
x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x
} }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> p { - > x
{ p[p[p[x]]] } }]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { ->
y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x {
-> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x] [y]
} } }[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { - > y
{ y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { ->
y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x] [y] } }
}[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][- > x { ->
y { x } }]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p]
[x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p
{ -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n
{ -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -
> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p { ->
x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]]
} } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[->
n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p {
-> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]] [-> n { -> p { -> x
{ p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n { - > p { -> x {
p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]] }
}][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x { ->
y { y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x] [y] }] }[-> x {
f[-> y { x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m { -> n { -> n {
n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { - > n { n[-> n {
-> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x] [y] } } }[->
p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } } } [-> p {
p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[->p { -> x
{ x } }][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[- > m { ->
n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { - > f {
f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n]
[x] }][m] } } }][n][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> l { -> x { -> x {
- > y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y]
} } } [x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y
{ y } }] [-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l { -> x { -> x { ->
y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } } [-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y
} }][-> x { - > y { -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f {
f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m {
-> n { n[-> n { -> p { - > x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x }
}] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][->
n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n {
-> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { ->
n { n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p {
-> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]] [-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]]
} } }[- > n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[->
n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p {
-> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n { n[->
m { - > n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x
} }] } } [-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> f
{ -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> n { ->
l { - > x { -> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }]
}[-> f { -> l { -> x { -> g { -> b { b }[-> p { p[-> x { -> y { x } }]
}[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y
{ y } }] } [l]] }[l]][x][g]][-> l { -> p { p[-> x { -> y { y } }] }[-> p { p[->
x { -> y { y } }] }[l]] }[l]][y] }] } } } }][l][-> l { -> x { -> x { -> y { ->
f { f[x] [y] } } }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[- > x { -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { ->
y { x } }]][x]] [-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y {
y } }][-> x { - > y { -> f { f[x][y] } } }[x][l]] } }] } }[-> b { b }[-> m { ->
n { -> n { n[- > x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n
{ n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f {
f[x][y] } } }[-> p { p[- > x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }] [-> p { -> x { x } }]]] }][m] } }[m][n]] }
}[n][-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f {
f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }[-> m { -> n { n[->
m { -> n { n[-> n { -> p { -> x { p[n[p] [x]] } } }][m] } }[m]][-> p { -> x { x
} }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]][-> x
{ -> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x } }]][-> x {
f[-> f { -> x { f[-> y { x[x][y] }] }[- > x { f[-> y { x[x][y] }] }] }[-> f {
-> m { -> n { -> b { b }[-> m { -> n { - > n { n[-> x { -> x { -> y { y } }
}][-> x { -> y { x } }] }[-> m { -> n { n[- > n { -> p { p[-> x { -> y { x } }]
}[n[-> p { -> x { -> y { -> f { f[x][y] } } } [-> p { p[-> x { -> y { y } }]
}[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }]
}[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { - > x { x } }][-> p { -> x
{ x } }]]] }][m] } }[m][n]] } }[n][m]][-> x { -> n { - > p { -> x { p[n[p][x]]
} } }[f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x {
-> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p {
-> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y {
-> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] }
}[m][n]][n]][x] }][-> p { -> x { x } }] } } }][n][-> m { -> n { n[-> m { -> n {
n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]] [-> p { -> x { x } }] }
}[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][x] }]][-> f
{ -> x { f[-> y { x[x][y] }] }[-> x { f[- > y { x[x][y] }] }] }[-> f { -> m {
-> n { -> b { b }[-> m { -> n { -> n { n[- > x { -> x { -> y { y } } }][-> x {
-> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p {
-> x { -> y { -> f { f[x][y] } } }[-> p { p[- > x { -> y { y } }] }[p]][-> n {
-> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x {
-> y { -> f { f[x][y] } } }[-> p { -> x { x } }] [-> p { -> x { x } }]]] }][m]
} }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[- > n { -> p { p[-> x { -> y { x
} }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } } [-> p { p[-> x { -> y { y }
}] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }]
}[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { - > x { x } }][-> p { -> x
{ x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> m { -> n { n[-> m { -> n {
n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][- > p { -> x { x } }] }
}[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]] } }][n]]]]
}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment