一度、Scalaと比較しかかったIronSchemeだが、あまりに異種格闘技ということで、以下ではおとなしくSchemeのWikibookを通じ入門していこう。
標準インストールされたIronSchemeのホームディレクトリは以下 : C:\Program Files\IronScheme ここにパスを通して、コマンドプロンプトかPowerShellでiscとタイプするとREPL画面を立ち上げることができる。SchemeのWikibook、Schemeは言語仕様が小さいからマスターが簡単だ、とどこかで聞いたようなことを書いてある。
その通り、マスターしやすい教科書となってくれているのだろうか。以下、いくつか試していってみる。
・・・set!で破壊的代入、(define (手続きの名称と引数) (手続きの実体)の束縛。。
なぜ、こう書くのか、プログラミング入門であるならば、Lispの「前置記法」き少し丁寧に解説するのがいいのかも。個人的には、英語のSVOC構文の比ゆとして解説したくなる。I set a (as) one…てな関係を図示する。。 その後、式の要素として、リテラルを解説している、数値・文字列・文字・真偽値の4つしか提示されてないのは、初学者向けにちょうど良いだろう。 続いて、LispらしくListの解説となっている。
emacsのeも知らない人は、ここでの括弧づけの嵐に、くじけてしまうかもしれない。
Scalaなら、
scala> val lst = 1::2::3::Nil
lst: List[Int] = List(1, 2, 3)
scala> lst.head
res11: Int = 1
scala> lst.tail
res12: List[Int] = List(2, 3)
scala> val lst = 1::2::3::Nil
lst: List[Int] = List(1, 2, 3)
scala> lst.head
res11: Int = 1
scala> lst.tail
res12: List[Int] = [...]
IronScheme, WikiBook
Hide
.NET上のLisp実装であるIronScheme。なぜ、.NET上で実装したのか気になるところではあるが、目の前にあるバーゲン品で購入したvistaならば、インストール後、C:\Program Files\IronScheme\IronScheme.Console.exeをクリックすると即実行できるので、とりあえず、試して見る。
◇IronScheme
ちょっと手抜きで実行した画面をそのままキャプチャ
(count ‘(1 2 3))がエラー ・・ Clojureとは違い、長さを測るのはlengthなのね。
shiroさんの『プログラミングGauche』(O’ REILLY))の46頁にあるfoldは実行できない ・・ S式の基本に戻って(+ x y)を積み重ねる。
◇Scala
Gaucheのfoldに相当するのは、foldLeft とか。例えば、こんな感じ :
scala> (List(2,3,4) foldLeft 1) {(x,y) => x+y}
res3: Int = 10
scala> (List(2,3,4).foldLeft (1)) {(x,y) => x+y}
res4: Int = 10
scala>(List(2,3,4) foldLeft 1) {_+_}
res5: Int = 10
左から順に加えていくfoldLeft、ふだんあまり使ってないが、自分が書くならば3番目の書き方かな。
ちなみに、foldLeft相当の記号として:/がある。はじめて見た時には違和感があったけど、左から順にぱたぱた倒れていく、とかイメージすれば、まぁ覚えられるかな。
(1 /: List(2,3,4))(_+_)
(1 /: (2 :: 3 :: 4 :: Nil))(_+_)
/:
◇再びIronScheme
・・・でも、Gaucheのfoldの方がシンプルだなぁ。
IronSchemeでも、Scheme実装であるGaucheのfoldのコードが動くので、以下のように自前でfoldを定義すれば、IronSchemeでもfoldできる。
・・・しかし、IronScheme.Console.exeは使い勝手が微妙。すでに、IronSchemeはIronSchemeで、独自のエコシステムを作りつつあるのだろうが、それを覚える気になるか、自分??
Gauche, IronScheme, Scala
Hide