Javascriptã§ç¶ç¶æ¸¡ã
id:nozom:20060317#1142577630ã®ç¶ããä¸çã§æã誤解ãããè¨èªã¨ãå¼ã°ããJavascriptã使ã£ã¦ç¶ç¶æ¸¡ããæ¸ãã¦ã¿ãã
ãªããJavascriptã®å¦çç³»ã¨ãã¦Rhino*1ã使ã£ããåèæç®ã¯ãå ¥éJavascriptã(ISBN:4756138713)ã
function fib(n) { if ((n == 1) || (n == 2)) return 1; else return fib(n - 1) + fib(n - 2); } function fib_cps(n, k) { if ((n == 1) || (n == 2)) return k(1); else return fib_cps(n - 1, function(v1) { return fib_cps(n - 2, function(v2) { return k(v1 + v2); }); }); } function fib_test() { for (var i = 1; i < 10; i ++) { var n = fib_cps(i, function(v) { return v; }); print("Fibonacci(" + i + ") = " + n); } } fib_test();
å®è¡çµæ
% java -jar js.jar fib.js Fibonacci(1) = 1 Fibonacci(2) = 1 Fibonacci(3) = 2 Fibonacci(4) = 3 Fibonacci(5) = 5 Fibonacci(6) = 8 Fibonacci(7) = 13 Fibonacci(8) = 21 Fibonacci(9) = 34
ãã®ããã«ãJavascriptã¯æ¥µãã¦Schemeã£ã½ãæ¸ããã¨ãã§ãããã¨ãããã£ããï¼å®éä½åº¦ãæ¬å¼§ãä»ããä½ç½®ãééããï¼
Schemerããè¦ãJavascriptã®ç¹å¾´(ã¨ããããæ°ä»ãããã®ã ã):
- æ¬å¼§ã®ä½ç½®ãéã
- è¦ç´ ã®åºåãã«ã«ã³ããå¿ è¦
- æ¼ç®åã¯ä¸éè¨æ³
- lambdaâfunction
- å¤å¤ããªã
- å¤ãè¿ãã«ã¯returnãå¿ è¦
- ãªã¹ãããªã(代ããã«Arrayã使ã)
- mapç³»ã®é¢æ°ããªã
- call/ccããªã(Rhinoã«ã¯ç¶ç¶ã®å®é¨çãªãµãã¼ããããããã*2 )
ãã®è¾ºã®ãã¨ã«æ°ãã¤ããã°ãJavascriptã¯Lispã®äºç¨®ã ã¨æã£ã¦ãåé¡ãªãããã
*1:Rhino - Java ã«ãã JavaScript http://www.mozilla-japan.org/rhino/
*2:RhinoWithContinuations - Cocoon Wiki http://wiki.apache.org/cocoon/RhinoWithContinuations