Y combinator: Difference between revisions
Content added Content deleted
(Add bruijn) |
|||
Line 4,902: | Line 4,902: | ||
=={{header|R}}== |
=={{header|R}}== |
||
<syntaxhighlight lang="r"> |
<syntaxhighlight lang="r"> |
||
#' Y = λf.(λs.ss)(λx.f(xx)) |
|||
(function(x) { (x)(x) })( function(y) { f( (function(a) {y(y)})(a) ) } ) |
|||
#' Z = λf.(λs.ss)(λx.f(λz.(xx)z)) |
|||
⚫ | |||
#' |
|||
fixp.Y <- \ (f) (\ (x) (x) (x)) (\ (y) (f) ((y) (y))) # y-combinator. |
|||
⚫ | |||
fixp.Z <- \ (f) (\ (x) (x) (x)) (\ (y) (f) (\ (...) (y) (y) (...))) # z-combinator also. |
|||
function(n) { |
|||
⚫ | |||
if (n<2) |
|||
1 |
|||
else |
|||
n*f(n-1) |
|||
} |
|||
} |
|||
Y-combinator test: |
|||
fib <- function(f) { |
|||
function(n) { |
|||
if (n <= 1) |
|||
n |
|||
else |
|||
f(n-1) + f(n-2) |
|||
} |
|||
⚫ | |||
<syntaxhighlight lang="r"> |
<syntaxhighlight lang="r"> |
||
fac.y <- fixp.Y (\ (f) \ (n) if (n<2) 1 else n*f(n-1)) |
|||
for(i in 1:9) print(Y(fib)(i))</syntaxhighlight> |
|||
fac.y(9) # [1] 362880 |
|||
fib.y <- fixp.Y (\ (f) \ (n) if (n <= 1) n else f(n-1) + f(n-2)) |
|||
fib.y(9) # [1] 34 |
|||
⚫ | |||
Z-combinator test: |
|||
⚫ | |||
fac.z <- fixp.Z (\ (f) \ (n) if (n<2) 1 else n*f(n-1)) |
|||
fac.z(9) # [1] 362880 |
|||
fib.z <- fixp.Z (\ (f) \ (n) if (n <= 1) n else f(n-1) + f(n-2)) |
|||
fib.z(9) # [1] 34 |
|||
</syntaxhighlight> |
|||
You can verify these codes by [https://shinylive.io/r/editor/#code=NobwRAdghgtgpmAXGAZgSwB5wCYAcD2aEALgHQBOYANGAMb4lwlJgDEA5AAQCanAvJ0DdwClIAKQQGdSEiQEpxGUilEYMs2QB0IHTgC1+QkeKkz5gxcsEAvMatlX1WnVq3oMuUrwA8AWk4aNTlEUWSCAoLUI0JV1MMDRAE9okKDE6KTY1k4En3oYACMiKGJ8clJXTA99X394lNFwmKio6MakoPrG0m703qDu0nVQrKtc-AKikvJOKAAbCXxyiCcuAFcJOBcIFChaUgTOGrcPXga60MaIULQUIIgvACZQgEZOOHm4TggAKmUIH2ejm2u32ogAnMNOMBngBdTgAZgAbA8ABwogAMW3Q+X2hz8x08cQ6F3iV04NzuhwEgK+bw+nD+ANCAGoGaJ-k9NNs0DiEuDIdC4fCACxbVwgqx4hmVUj6M7E2p3a63dmPF50jZfX7splcnZ7Kz8zhZQUI5FozHLbk4yVHGVyxopS7KyleamhCAaz6Mmmsxmcio2o0m2EI0UQMAAXxhQA here] |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |