Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-04-22

DylanでL-99 (P03 K番目の要素)

| 21:40 | DylanでL-99 (P03 K番目の要素) - わだばLisperになる を含むブックマーク はてなブックマーク - DylanでL-99 (P03 K番目の要素) - わだばLisperになる

DylanでCLのcondに相当するものは、caseで、CLのcaseに相当するものは、selectになります。使い勝手も大体同じ。というか、途中からS式からAlgol表記へ乗り換えた経緯もあり、LISP系でお馴染のものは大体あります。CLをAlgol風に表記しても、多分Dylanみたいになるのでしょう…。

自分は、C/Algol系の言語は殆ど書いたことがなくて、S式系の言語ばかりやっているのですが、Algol記法では

  1. セミコロンの使いどころが把握できない。
  2. リストの要素を一々コンマで区切らないといけないのがしんどい、というかコンマを忘れても気付けない。
  3. 括弧で囲まれていると前置記法として読み書きしてしまうので、if (= x y)等がエラーになってもずっと発見できない。
  4. 括弧の使いどころが分からない。(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;