Colleague: You like Emacs, don't you?これ以外にも、なんだか毛嫌いというか、Lispは近寄りがたいみたいな雰囲気で話すので、なんでだろうなぁ?と思い考えてみた。
Me: I do.
Colleague: Is it Lisp?
Me: Sort of. (It's Scheme but I think Sagittarius is already sort of 'MY LISP' now...)
Colleague: It's one of the languages I can't understand?
Me: It's not so difficult, you know?
Colleague: It is. I don't think I can accept the parenthesis.
Me: (I wish I could show this site : 本当にLispはカッコが多い?)
そういえば僕も昔はLispを避けていたのだから、似たような考えがあって、何かがきっかけで考えが変わったはずである。っで、避けていた理由を探してみた。
- Lisp入門のサイトとかで必ずある「consとリスト」の解説。
- 正直読んでも、だから何ができるの?という気になった。
- 更に、なんか面倒だなぁという気にさせられた。
- How to become a hackerの悟り体験の話。
- なんだか小難しい言語ではないのかという錯覚を起こさせた。
- 関数型言語と再帰。
- 手続き型言語から始めると再帰の概念は分かりにくい。(少なくとも僕はそうだった)
- 無名関数、クロージャ、高階関数。
- 手続き型、以下略。
- これに関しては、言語ごとに(特にクロージャ)定義が違うのも問題な気がする。
- lambdaという言葉。
- boost::lambdaでlambda = 無名関数 = クロージャみたいな理解したなぁ。(遠い目)
それではあまりにもと思うので、啓蒙するにはどうすればいいか。
※僕が考える最強の啓蒙活動的な感じです。当てにしないでください
- 可能な限りシンプルに、かつC言語とかの最初のステップに合わせる。
- Hello Worldでもいいし、ファイルを一行処理してとかでもいいと思う。
- いきなり、consとリストではひく。
- エディタの支援を当てにしてもいいということを教える。
- 括弧の対応とか目視では無理。
- Emacs最強(これも啓蒙してしまえ!)
- S式一個切り取って貼り付けとか知ると、Javaとか面倒すぎて編集する気になれなくなるはず。
- 再帰を可能な限り隠す。
- CLならloopで大抵いけると思う。
- Schemeならnamed letで。
- クロージャは単なる関数だとしておく。
- 名前に臆することもあるよね?
- でも、処理系がたくさんあってどれ使えばいいのさ?
- 入門レベルのCLならどれでもいいはず。
- Schemeは、Gaucheかなぁ。実績あるし。(自分の処理系を推したいが、名前を横に並べるのもおこがましい気になる・・・)
とりあえずリスト作って、後はfor-eachでもmapでもfoldでも使えばいいじゃん、見たいな感覚になると早いと思うんだけど、そこまでが遠いなぁ・・・
2 comments:
Schemeに限らずCLもありで啓蒙する、というのであれば「実践Common Lisp」読ませるだけで良いんじゃないかと。
listの説明後回しだし、処理系選びとSLIMEの話が終わるといきなり簡単なデータベースの構築話が始まるし。
実は入門書的(SICP除く)なものを読んだことがないので、気づきもしませんでした(--;)
> listの説明後回しだし、処理系選びとSLIMEの話が終わるといきなり簡単なデータベースの構築話が始まるし。
まさにこれ!という感じです。
しかも、原文はネットで公開されているのですね。読んでみよう(^^;
http://www.gigamonkeys.com/book/
Post a Comment