kiyoka.2009_03_30 RSSPLAIN

Related pages: !kiyoka.blog.list kiyoka.2010_10_04 !kiyoka.blog.2010_10 !kiyoka.blog.2009_03
35555555555555555555555545555555
3

[言語][Nendo] そろそろオレ言語でもやっておくか(8)

5

Rubyで書いたLisp処理系の RedLisp 開発の続き。

5

lambdaとifの二つのスペシャルフォームを実装した結果、fact(階乗計算)関数が動くようになった。

5
$ ./redlisp
5
redlisp> (def fact
5
     (lambda (n)
5
       (if (= n 1)
5
           1
5
           (* n (fact (- n 1))))))
5
          rubyExp=<<<fact = lambda { |n|
5
if ( _eq.call(n , 1) ) then 1 else _multi.call(n , fact.call(_minus.call(n , 1))) end
5
}
5
>>>
5
#<Proc:0x4022dea0@./redlisp:263> 
5
redlisp> (fact 10)
5
          rubyExp=<<<fact.call(10)>>>
5
3628800
5
redlisp> (fact 20)
5
          rubyExp=<<<fact.call(20)>>>
5
2432902008176640000
5
redlisp> 
5

 

5

RedLispは、まだ実験段階なので、構文エラーなどの例外処理は真面目にやっていない。

5

しかし、内部でS式をRubyに動的にトランスレートしてはevalするという方式を取ること自体は間違いでは無さそうという感触は得た。

4
 3394736419_80a85b7aaa_m
5

さて、次はどんな実験をしようかな。

5

let let* の実装をやってみて、Rubyのレキシカルスコープがそのまま利用できるかの確認と、map等の高階関数をどうやって実装するか等の検討かな。

5

その後はRubyのクラスライブラリをどうやって呼び出すかあたりが課題となるだろう。

5

File#openとかはブロックを渡す場合と渡さない場合があるが、そういうのをどうやって呼び出し方変えるかなど考えないといけない事が控えている。

5

というか、RedLispはそういう思考実験を繰返しながら、言語デザインをするのが目的だったので、早くそのレベルまでいきたいな。

5

 

5

...comment disabled...