RubyでSchemeぽいの書く(3)

はてダはっつけコード管理に限界を感じたのでGoogle Code Hosting使ってみた。Gmailアカウント持ってるだけで、おどろくほど簡単に使えた。選択できるLicenceにNYSLとかpublic domainとか無かったんで修正BSDライセンスになったらしいです。
http://code.google.com/p/rbdsp/

Rubyの全体像は、なんかまだ見えてこない。でもけっこう使いやすいと思う。あと動的言語の強さってのを感じた。インタプリタは、動的言語の方が書きやすいかもなあ。

以下のようなことできるくらい。例によって効率とかは全無視でいってます。

(define a (lambda (x) (+ 1 x)))
(define b (lambda (x) (+ 1 (a x))))
(define c (lambda (x) (+ 1 (b x))))
(print (a 1))
(print (b 2))
(print (c 3))
C:\hoge\docs\rbdsp>ruby rbdsp.rb tests\test-010.scm
2
4
6

lambdaを一応仕込んだ。

(define fact
  (lambda (x)
    (if (eq? x 0)
      1
      (* x (fact (- x 1))))))
(print (fact 5))
C:\hoge\docs\rbdsp>ruby rbdsp.rb tests\test-011.scm
120

まあ階乗ができればいいよねだいたい。

(define a 100)
(print a)
(set! a 200)
(print a)
C:\hoge\docs\rbdsp>ruby rbdsp.rb tests\test-012.scm
100
200

今思いだしたけど、たぶんset!とdefineが同じになってた気がする。

(define mkcount
  (lambda (x)
    (lambda () (set! x (+ x 1)) x)))
(define c0 (mkcount 0))
(define c1 (mkcount 10))
(print (c0))
(print (c1))
(print (c0))
(print (c0))
(print (c1))
C:\hoge\docs\rbdsp>ruby rbdsp.rb tests\test-013.scm
11
11
12
13
12

出鱈目じゃんという。何故こんなことになった。なんとなくで手だけ動かして書くからこういうことになる。

えーと、このRuby課題のレポート締め切りたしか2/4だな。レポート作業にとりかからねば。

test