#:g1: 世の中の人のLispの括弧が駄目というのは、コードがデータに見えてしまって駄目ということなのではないか説

Posted 2021-12-19 18:13:07 GMT

Lisp一人 Advent Calendar 2021 20日目の記事です。

世の中の人のLispの括弧が駄目というのは、コードがデータに見えてしまって駄目ということなのではないか説

表題のとおりなのですが、このブログの読者はS式で記述されたコードに順応し過ぎている方が殆どだと思いますので、Lisperにも直感的に伝わるように表現するならば、どうにもS式が駄目だ、という人は、こういうコードが、

;;; S式
(defun fib (n)
   (if (< n 2)
       n
       (+ (fib (1- n))
          (fib (- n 2)))))

こう見えている可能性があるんじゃないでしょうか

;;; リスト
#.(list 'defun
        'fib
        (list 'n)
        (list 'if
              (list '< 'n '2)
              'n
              (list '+ 
                    (list 'fib (list '1- 'n))
                    (list 'fib (list '- 'n 2)))))

これなら流石のLisperでも、コードというよりデータに見えるでしょう。

以前、色々な言語でS式を書いてみるというのを試してみましたが、データの表記は大抵、括弧で括られています。

人よっては括弧で括られたものは、何をどうしてもデータに見えてしまうのではないでしょうか。
Lisperには嫌われるぶら下り括弧もコードがデータに見えないようにする為の抵抗に思えたりもしなくもありません(まあ括弧の対応のためというのもありますが)

ちなみに、S式も、カンマ区切りにすると、コードよりはデータに見えてきます。

;;; S式
(defun, fib, (n),
   (if, (<, n, 2),
       n,
       (+, (fib, (1-, n)),
           (fib, (-, n, 2)))))

S式はこのコードとデータの表記の間の絶妙なバランスで成立している気がしてきました。

鶏と卵の問題ですが、コードとデータを行き来するような言語が流行れば、必然的にS式のような表記体系に落ち着くのではないでしょうか。


HTML generated by 3bmd in LispWorks 8.0.0

comments powered by Disqus