ClosureさえあればLambda Calculusは実現できるので、当然Javascriptでも出来る。
にも関わらず、検索してもあまり実例がなかったので一つ作ってみた。
Source:
// define
var zero = function(f){
return function(x){
return x}};
var succ = function(n){
return function(f){
return function(x){
return f(n(f)(x))}}};
var add = function(m){
return function(n){
return function(f){
return function(x){
return m(f)(n(f)(x))}}}};
var mul = function(m){
return function(n){
return function(f){
return m(n(f))}}};
var pow = function(m){
return function(n){
return n(m)}};
// execute
function $(id){ return document.getElementById(id) };
var one = succ(zero);
var two = succ(one);
var four = add(two)(two);
var eight = mul(two)(four);
var sixteen = pow(two)(four);
var numbers = [one, two, four, eight, sixteen];
$('result').innerHTML = '';
for (var i = 0; i < numbers.length; i++){
var n = numbers[i];
$('result').innerHTML += numbers[i](function(n){return 1+n})(0);
$('result').innerHTML += ' = ';
$('result').innerHTML += numbers[i](function(n){return '(1+' + n + ')'})(0);
$('result').innerHTML += '<br />';
}
実行!
実はこのentryには<script>タグが一切存在にも関わらず、「実行」できる。javascript:void(eval(document.getElementById('lambda').firstChild.nodeValue))へリンクしているだけだ。こういうところも素晴らしい。
Dan the (?:ECMA|Java)scripting Lambacamel
See Also:
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。