Last active
July 2, 2024 07:58
-
-
Save haruguchi-yuma/7fcd95e28d29bc0edfa58b7c2e72b9d3 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 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