LISPUSER

LISPMEMOLisp is a programmable programming language. -- John Foderaro

(top)  (memo)  (rss)

S式の限界

息抜きに小ネタをば。Shiro さんとこの Lisp:S式の理由 の中のネタより。

個人的には、condは (Paul GrahamがArcで提案しているように) 括弧をひとつ 省いて、(cond 述語 式 述語 式 ) でいいんじゃないかという気がします。 式に複数の処理を書きたければbeginを使うと。

(cond (predicate x) (begin (do-something) (do-something2))
      (predicate y) (do-another-thing)
      else          (do-whatever))

また、letについては、束縛とボディの式に別種の括弧を使うとか:

(let [x (calculate-x a b c)]
     [y (calculate-y d e f)]
  body ...)

なるほど、この辺は Lisper 間での意思統一が難しそうですね。 括弧の量が問題になるのなら、種類ではなく括弧を。 区切りがよくわからないなら記号を導入すべきではないでしょうか。

;; 個人的に好みの cond
(cond (predicate x) => (do-something1)
                      (do-something2)
     (predicate y) => (do-another-thing)
     else          => (do-whatever))

矢印派の勢力を拡大すべく 矢印cond のムービーを用意しました。 総製作時間 5 分に渡る大長編。

あ、しまった => だと SRFI の拡張 cond/case と紛らわしいですね…… orz じゃあ let の拡張は <- を使って…。

;; 個人的に好みの let
(let
   x <- (calculate-x a b c)
   y <- (calculate-y d e f)
 in
   body ...)

寝る前に矢印 let にもチャレンジ。 矢印let ムービーも用意しました。見直すと、不要な処理がありますね。

つうか in は不要なんじゃないかとか。いや、でもエディタ支援のときに キーワードが欲しいなー。でもキーワードという概念が Lisp に合わないような。

こうして構文を作るのは簡単ですが「正しい事」へと到達するのは難しかったのです。 そして Lisper は満足できずに結局 S 式を使いつづけるのでした。 おしまいおしまい。

みんなが好き勝手にいろいろ試すのを「マクロの暗黒面」としてとらえる人も 多いかと思いますが、「正しい事」は多くのハッカーが議論を尽した結果得ら れるものなんです。…と正当化してみましたがやっぱ苦しいですかね。

  • 矢印cond : 5 分でできる新しい cond (Flash ムービー)
  • 矢印let : 10 分でできる新しい let (Flash ムービー)

でも使ってみると Emacs の支援が弱くなるので、構文だけつくっても今一なんだよなぁ…。 ねむいのでこのへんで。

posted: 2007/01/28 01:54 | permanent link to this entry | Tags: LISP

(top)  (memo)  (rss)