COMMON LISP JP > Archives > 2009/11/27

2009/11/27 03:08:15 UTCleque
#
M 式についてググっていたんだけれどなかなか見つからない……
#
http://squab.no-ip.com:8080/wiki/435
#
にある形式的定義に従えば '(1 2 3) は quote[1; 2; 3] になるんですかね
#
でも点対はやっぱり謎
2009/11/27 03:12:25 UTCshiro
#
M式はプログラムを記述するもので、プログラムの記述にはドット対は出てこないので、たぶんドット対記法はない。
#
M式でプログラムを書いていてもデータ部分はS式。
#
手元にあるLISP 1.5 Programmer's Manualを紐解くと…
#
cons[A;B] = (A . B)
cons[(A . B);C] = ((A . B) . C)
cons[cons[A;B];C] = ((A . B) . C)
car[(A . B)] = A
#
等の例があがっている。
#
ちなみにM式ではデータはS式で記述する (シンボルは常に大文字であることで区別; M式の関数名や変数名は小文字) ため、quoteは存在しない。S式が出てくればデータ。
#
当時はM式を人間がS式に直してカードパンチしてたわけだが、その際にプログラム内のデータ(S式)を (QUOTE x)の形に直していたようだ。
2009/11/27 04:19:25 UTCleque
#
なるほど > データは S 式で
#
今試しに Scheme→M式なプログラムを書いてみていたんですけれど素直にはいかなそうです
#
CL で M 式 REPL: http://www.informatimago.com/develop/lisp/small-cl-pgms/m-expression/
#
あ、 lambda の dotted list 以外は問題ないか
2009/11/27 15:37:42 UTCg000001
#
M式でちょっと書いてみると、S式より面倒臭い気がしますね
#
当時、M式でなくてS式を好む人が出てしまったというのもなんとなく分かる気がしないでもないですw
#
括弧の対応問題についても、M式の方が書きやすかったり区別しやすかったりするわけでもないようですし…。主観ですが。
2009/11/27 15:58:24 UTCg000001
#
そういえば、まったく誰も関心がないところだと思うのですが、
#
MacLISPでcondのelse節のTにクォートを付けるのは、M式で
#
[PRED[a] → ...
 T → ...]
#
と書いていた名残りなのかなあと想像したりするのですが、
#
真相やいかに
#
上のコードは、S式だと
#
(cond ((pred a) ...)
      ('T ...))
#
です。あ、M式版で;をつけるのを忘れた
#
PREDも小文字だった…
2009/11/27 16:16:16 UTCleque
#
文脈によって (a b c) が [a; b; c] になったり a[b; c] になったりするのが面倒といえば面倒ですね
#
結局閉じ括弧は ]]]] ってなっちゃいますし
#
構文ごとに括弧の使い方を覚えないといけないという
2009/11/27 20:11:00 UTCg000001
#
ですねー。M式はなんだか複雑です
#
SBCL 1.0.33 ktkr!
#
http://permalink.gmane.org/gmane.lisp.steel-bank.announce/108
#
どんな機能か分からないですが、とりあえず、:sb-xref-for-internalsを有効にしてビルドしてみる