#:g1: dylanでL-99 (P03 K番目の要素)

Posted 2008-04-22 12:40:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
dylanでCLのcondに相当するものは、caseで、CLのcaseに相当するものは、selectになります。使い勝手も大体同じ。というか、途中からS式からAlgol表記へ乗り換えた経緯もあり、LISP系でお馴染のものは大体あります。CLをAlgol風に表記しても、多分dylanみたいになるのでしょう…。
自分は、C/Algol系の言語は殆ど書いたことがなくて、S式系の言語ばかりやっているのですが、Algol記法では
+セミコロンの使いどころが把握できない。
+リストの要素を一々コンマで区切らないといけないのがしんどい、というかコンマを忘れても気付けない。
+括弧で囲まれていると前置記法として読み書きしてしまうので、if (= x y)等がエラーになってもずっと発見できない。
+括弧の使いどころが分からない。(foo 1 2 3)は、foo(1, 2, 3)と書かれるんだと思いますが、foo 1 2 3としてしまう。
という感じで、良くC/Algol系の人がLISPで遭遇する困難と正反対になっている気がしないでもありません。
そして、この辺の問題は気付けないってのが、非常にストレスに感じます。
この辺は、馴れなんじゃないかなと思いますが、自分のように最初からLISPの割合が高い人間が正反対の性質を持つということは、もしかしたら、「どっちににも馴れる」というのは比較的難しいところで、「どっちか」で落着いてしまうところなのかもしれません。
もちろん、ピアノもギターも弾ける人はいる訳で、訓練次第だとは思いますが、多分、楽器の乗換え位しんどい気がします。

element-at(#(a:, b:, c:, d:), 3)
//=> #"c"

;; Code module: l99-03

define generic element-at (sequence :: <sequence>, position :: <integer>) => (result :: false-or(<symbol>));

define method element-at (sequence :: <list>, position :: <integer>) => (result :: false-or(<symbol>)) case empty?(sequence) => #f; 1 >= position => head(sequence); otherwise => element-at(tail(sequence), position - 1); end case end method element-at;


comments powered by Disqus