ACL2 の二分探索木の記事は不定期で進めているんだけど対象読者で悩んでる。Lisp 知らない人向けに簡単に ACL2 で使う範囲の Lisp のチュートリアルを載せようと思ったんだけど、シンボルと cons セルが難しい。Lisp の特徴にマクロがあるのは確かにそうだと思うんだけど、それ以上にシンボルと cons セルが特徴的だと思う。
シンボルが使えるプログラミング言語はたくさんあるんだろうけど、Lisp みたいに日常的にシンボルを使うプログラミング言語はなかなかないのではないか。
Lisp のプログラムの簡単な例として(append '(a b c) '(d e f))って書くだけでもシンボルの話がでてくるので困る。
Common Lisp のシンボルの話をちゃんとするのは難しいのでそれはやめるとしても、そうでなくてもシンボルを説明するのは大変だと思う。
何かの式の記号を表現するのに使えるやつみたいな感じの説明でいいんだろうか。eq で比較できるってことに識別子として利用可能という意味で重要だけどその話は難しいし。
出自としては Lisp の中で Lisp を書くところからシンボルは始まっているわけだけどその話をするのはなんか違う気がするし。
Lisp の特徴はマクロとかじゃなくて cons セルとシンボルなのではないかと思うようになってきている。
軽くインターネットで調べると Ruby にはシンボルがあるっていうけどあれはハッシュのキーに使うとか、他にはなんか謎の使われ方がされる感じであって Lisp のプログラムの識別子もシンボルだよね〜ってノリとは違うし、REPL で何かちょっとしたことをするのに選ばれるものではないような気がしてる。
Lisper がシンボルを多用するのって eq で比較できるからとじゃなくて文字列と比べるとタイプ数が少なくて済むし見た目もすっきりしてるからという程度でしかない気がする。
あと、どうせマクロを書くときにシンボルの操作は避けて通れないし。
あのわざわざ文字列を使うのかという感覚はどこから生じてきたのか。Land of Lisp あたりで洗脳されたんかな。
(append '(a b c) '(d e f))の方がなんかいい。(append '(#\a #\b #\c) '(#\d #\e #\f))は冗長だし、(append '("a" "b" "c") '("d" "e" "f"))は小指が疲れるし、(append '(1 2 3) (4 5 6))は何で数字にしなきゃならんのだって気分になるし。
そもそも式をクォートするってのが意味不明なんだよな。それはどうやって説明すればいいんだ。
ACL2 の記事の対象読者を Lisp は知ってる人〜再帰は普通に書ける人〜ってするとかなり絞られちゃう気がするんだよな。
Lisp 知らなくても雰囲気でなんか読めたりしないかな。
The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!
そもそも式をクォートするってのが意味不明なんだよな。それはどうやって説明すればいいんだ。