2006年03月15日 02:38 [Edit]

javascript - Lambda Calculus

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:

この記事へのトラックバックURL

この記事へのトラックバック
このY Combinatorの話題も、実名匿名論争ほどではないにしろ時折ネットを駆け抜ける風になる話題ですね。 Y コンビネータって何? - IT戦記Y コンビネータいみふ><! で、私を含め、 Y Combinator が何なのか、何が凄いのかというのを解説する人はたくさんいるのだけど、...
Y談 - 自分って自明?【404 Blog Not Found】at 2008年02月02日 02:42
以下のブログで JavaScript 1.8 の新文法が紹介されています。 http://ejohn.org/blog/javascript-18-progress/ MDC の資料 -> http://developer.mozilla.org/en/docs/New_in_JavaScript_1.8 その中でも無名関数についての新文法が楽しいので紹介します。 // 関数の中に
[javascript] JavaScript 1.8 では無名関数が書きやすくなる。【IT戦記】at 2007年06月13日 14:30
いえ、50もありません。Paul Simonの歌のもじりです、はい。ちなみに6曲目。いいんです。Paul Simonだって50も紹介してないんですから。 i d e a * i d e a - ブログにコードを貼り付ける方法で悩むの巻昨日のJavascriptの記事を書いていて思ったのですが、みなさんコードを...
ソースを貼付ける50の方法【404 Blog Not Found】at 2006年09月06日 16:22
Since (?:ECMA|Java)script supports closures, it is Lambda-calculus ready. I googled examples but there seems none so I made one. Welcome to the world of 了!
Lambda Calculus in Javascript【DANKOGAI::Blog】at 2006年03月15日 03:14