Skip to content

Instantly share code, notes, and snippets.

@haruguchi-yuma
Last active July 2, 2024 07:58
Show Gist options
  • Save haruguchi-yuma/7fcd95e28d29bc0edfa58b7c2e72b9d3 to your computer and use it in GitHub Desktop.
Save haruguchi-yuma/7fcd95e28d29bc0edfa58b7c2e72b9d3 to your computer and use it in GitHub Desktop.
ラムダ計算でフィボナッチ数列を計算する
# ラムダ関数を人間にも読めるようにするメソッド群
def to_nat(nat)
nat[->n{n+1}][0]
end
def to_bool(bool)
->b{b}[bool][true][false]
end
def to_ary(proc)
ary=[]
until to_bool(->p{p[->x{->y{x}}]}[proc])
ary << ->l{->p{p[->x{->y{x}}]}[->p{p[->x{->y{y}}]}[l]]}[proc]
proc = ->l{->p{p[->x{->y{y}}]}[->p{p[->x{->y{y}}]}[l]]}[proc]
end
ary
end
# 本体(50文字折り返し)
proc =
->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{->s{->x{
s[n[s][x]]}}}[->p{p[->x{->y{y}}]}[p]]]}][->x{->y{-
>f{f[x][y]}}}[->s{->x{x}}][->s{->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
{->s{->x{s[n[s][x]]}}}[m]][n]][m][x]}][->x{->y{->f
{f[x][y]}}}[->x{->y{x}}][->x{->y{x}}]]}}}][->s{->x
{x}}][->s{->x{s[s[s[s[s[s[s[s[s[s[x]]]]]]]]]]}}]][
->n{->f{->x{f[->y{x[x][y]}]}[->x{f[->y{x[x][y]}]}]
}[->f{->n{->b{b}[->n{n[->x{->x{->y{y}}}][->x{->y{x
}}]}[n]][->x{->s{->x{x}}}][->b{b}[->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{->s{->x{s[n[s][x]]}}}[->p{p[->x{-
>y{y}}]}[p]]]}][->x{->y{->f{f[x][y]}}}[->s{->x{x}}
][->s{->x{x}}]]]}][m]}}[n][->s{->x{s[x]}}]]}[n]][-
>x{->s{->x{s[x]}}}][->x{->m{->n{n[->n{->s{->x{s[n[
s][x]]}}}][m]}}[f[->n{->p{p[->x{->y{x}}]}[n[->p{->
x{->y{->f{f[x][y]}}}[->p{p[->x{->y{y}}]}[p]][->n{-
>s{->x{s[n[s][x]]}}}[->p{p[->x{->y{y}}]}[p]]]}][->
x{->y{->f{f[x][y]}}}[->s{->x{x}}][->s{->x{x}}]]]}[
n]]][f[->n{->p{p[->x{->y{x}}]}[n[->p{->x{->y{->f{f
[x][y]}}}[->p{p[->x{->y{y}}]}[p]][->n{->s{->x{s[n[
s][x]]}}}[->p{p[->x{->y{y}}]}[p]]]}][->x{->y{->f{f
[x][y]}}}[->s{->x{x}}][->s{->x{x}}]]]}[->n{->p{p[-
>x{->y{x}}]}[n[->p{->x{->y{->f{f[x][y]}}}[->p{p[->
x{->y{y}}]}[p]][->n{->s{->x{s[n[s][x]]}}}[->p{p[->
x{->y{y}}]}[p]]]}][->x{->y{->f{f[x][y]}}}[->s{->x{
x}}][->s{->x{x}}]]]}[n]]]]}]][->s{->x{x}}]}}][n]}]
results = to_ary(proc).map{ to_nat(_1) }
p results #=> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment