1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:48:56] lispを触ってみたい入門者のQ&A 初心者のQ&A 本スレでは恥ずかしくて聞けない人のQ&A 本スレは高度すぎて割り込めない人のQ&A linuxでなくてwindowsでやりたいんですが・・・Q&A lispを使用してC#やJAVAの代替にするための方法(おまけ) ま、ゆっくりたりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ
91 名前:デフォルトの名無しさん mailto:sage [04/12/15 01:20:28] >>88 javaのコレクションフレームワークを実装したいのか? 気持ちはわかるがLispには型とかないからな、 あんまり役に立たないんじゃないか? 勉強にはなりそうだが
92 名前:デフォルトの名無しさん mailto:sage [04/12/15 12:24:12] mapとかsetとかのレディメイドなコンテナが欲しいんだろうから それなりに意味はあるんじゃない?
93 名前:デフォルトの名無しさん mailto:sage [04/12/15 13:13:20] setは抽象データ型としての集合型だとして、 CLにはリストを集合とみなして操作対象とするオペレータは次のものがあるけど、これじゃ だめなの? INTERSECTION, NINTERSECTION, ADJOIN, PUSHNEW, SET-DIFFERENCE, NSET-DIFFERENCE SET-EXCLUSIVE-OR, NSET-EXCLUSIVE-OR, SUBSETP, UNION, NUNION
94 名前:デフォルトの名無しさん mailto:sage [04/12/15 13:30:28] 特定の型だけを格納すると宣言した、consに相当する構造体を定義して 上記のオペレータをgeneric functionのメソッドとして実装することで、 既存の標準オペレータ群を透過的に拡張する。 (しかしGF化のペナルティーを差し引いてもお釣りがくるほど、速くなるか?)
95 名前:デフォルトの名無しさん mailto:sage [04/12/15 13:35:03] Brunoタソは、GNU CLISPでは、ジェネリック関数の呼び出しは通常関数の呼び出しに 比べて、7〜9倍くらい遅いと言ってたよ。
96 名前:デフォルトの名無しさん mailto:sage [04/12/16 00:12:27] >javaのコレクションフレームワークを実装したいのか? もし、そういうものがあればJAVAプログラマーをlispに取り込める かもしれんな。つーわけで協力してもいいぞ。
97 名前:デフォルトの名無しさん mailto:sage [04/12/16 08:53:02] >>96 Javaのコレクションフレームワークにあって現在のLispにないものって 何か教えてくれませんか? www.stackasterisk.jp/tech/java/collection01_01.jsp をチラっと読んだかぎりでは、すでにほとんど同じものがLispに存在しているように 感じられたので。
98 名前:デフォルトの名無しさん mailto:sage [04/12/16 18:54:53] Iterator って CL にある?
99 名前:デフォルトの名無しさん [04/12/16 23:07:36] >>97 ってゆ〜か、LISPってそういう関数の紹介ページないの? JAVADOCみたいなものでもいいけど
100 名前:デフォルトの名無しさん [04/12/16 23:09:08] そして100ゲット!!
101 名前:デフォルトの名無しさん mailto:sage [04/12/16 23:27:45] Hyperspec
102 名前:デフォルトの名無しさん mailto:sage [04/12/17 09:13:46] >>99 言語としてのCommon Lispは、ANSI(アメリカ規格協会)という団体が定めた規格書によって 規定されています。 この規格書にもとづいて、各実装者がそれぞれの処理系を実装しています。 この規格書をHTML化し、リンクなどを張りめぐらした、Xanalys社の Common Lisp HyperSpec が比較的有名です。これは、 www.lispworks.com/reference/HyperSpec/index.html で閲覧も出来ますし、無料でダウンロードすることもできます。 Common Lispの言語仕様上の議論はこの規格書を基礎として行う事が多いと思います。 いわゆるコンテナのようなものとしては、Conses, Sequences, Hash tables, のDictionary ページを見てみると様子がわかるかもしれません。
103 名前:デフォルトの名無しさん mailto:sage [04/12/17 09:27:07] >>98 > Iterator って CL にある? Iteratorは、with-hash-table-iterator, with-package-iteratorなどの ハッシュテーブル用とパッケージ内のシンボル走査用のものはありますが、 Sequence用には用意されていません。 では、Sequence(リストとベクタ)の各要素を走査していくときはどうするかというと、 リストには、mapcar, mapc, mapcan, maplist, mapl, mapcon, dolist Sequenceには、map, map-intoが用意されています。 また、その他にも、汎用のループオペレータであるdo, do*, loopなんかも あります。 Sequence用のiteratorを実装してみるのは、Lispに慣れる練習になるかも。
104 名前:デフォルトの名無しさん mailto:sage [04/12/17 10:30:09] CommonLISPはsetfがキモイ
105 名前:デフォルトの名無しさん mailto:sage [04/12/17 10:33:25] ならばどうあればきもくないのか言わないと。
106 名前:デフォルトの名無しさん mailto:sage [04/12/17 10:57:40] >>104 Generalized Referenceは飛び道具という感じはするけど、 (incf (getf *billing* :total) 100) なんて記法ができるのはしびれるね。
107 名前:デフォルトの名無しさん mailto:sage [04/12/17 11:21:20] *f系マクロ定義読んでみ? 無茶苦茶だぜ?デバッグ大変な気が。 ああいうのを「慣れ」としていいのだろうか、 と疑問に思った。 と同時にLISPの限界を見たって感じか。 ここまで力を持つ構文作るなら 万能代入メソッドみたいなの作ればいいと思った。
108 名前:デフォルトの名無しさん mailto:sage [04/12/17 11:57:49] GNU CLISPのrotatefマクロの定義を見たけど、そんなに無茶苦茶かな? 22行だし。 get-setf-expansionの返り値の意味を把握していないと辛いけど。 ちなみに変数の値を単純にswapするイディオムの展開は次のような感じ。 (macroexpand '(rotatef a b))=> (LET* NIL (MULTIPLE-VALUE-BIND (#:G5407) A (MULTIPLE-VALUE-BIND (#:G5406) B (SETQ A #:G5406) (SETQ B #:G5407))) NIL) > 万能代入メソッドみたいなの作ればいいと思った。 そういう仕組みがdefsetfなのでは? メソッドとはCLOSのメソッドということ? Lispでは「構文」と「メソッド」との区別が それを使用しているコード上では分かりにくいからね。
109 名前:デフォルトの名無しさん [04/12/18 18:11:01] なんていうか、86はCLOSだけでコレクションフレームワークをつくり たいんだよな?それは総称関数だけのライブラリってことなのか?
110 名前:デフォルトの名無しさん mailto:sage [04/12/18 19:33:44] Eclipseでlispが犯りて〜〜
111 名前:デフォルトの名無しさん mailto:sage [04/12/18 19:46:50] アナグラムすると ELISP-CE = カスタマーエンジニア向けのEmacsLisp
112 名前:デフォルトの名無しさん mailto:sage [04/12/18 20:54:33] Ω ΩΩ<・・・
113 名前:デフォルトの名無しさん mailto:sage [04/12/18 21:28:01] >>110 EclispでLisp開発するためのプラグインを書いている人がすくなくとも 2人はいる。
114 名前:デフォルトの名無しさん mailto:sage [04/12/18 21:30:13] >113 誰ですか? して、そのプラグインは公開されてるのですか?
115 名前:デフォルトの名無しさん mailto:sage [04/12/18 21:42:37] もったいぶって悪かったな。 www.czempin.de/nicolai/blog/archives/000197.php lemonodor.com/archives/000218.html 進行状況はわからん。
116 名前:デフォルトの名無しさん mailto:sage [04/12/18 22:05:23] >115 こっちこそすまん。聞き方がずさんだった。 まさか、マジに存在してるとは思ってなかった。 今から使ってみる。
117 名前:デフォルトの名無しさん mailto:sage [04/12/18 22:32:00] Lisp in a box をMeadowで作ってくれる人いないかな… common-lisp.net/project/lispbox/ WindowsでGNU CLISP + SLIME環境を整えるのが簡単になったらいいな。
118 名前:デフォルトの名無しさん mailto:sage [04/12/19 04:24:46] WINDOWSは開発環境としてはlisperには見放されている。 あきらめるべし
119 名前:デフォルトの名無しさん mailto:sage [04/12/19 14:36:32] s/lisper/野良lisper/ 逆に職業軍人向けはWindows環境が一番充実してる罠。
120 名前:デフォルトの名無しさん mailto:sage [04/12/19 15:04:26] なんで軍人??
121 名前:デフォルトの名無しさん mailto:sage [04/12/19 15:42:55] とまべっちに聞け。
122 名前:デフォルトの名無しさん mailto:sage [04/12/19 23:29:21] (defclass Object()()) これtop
123 名前:デフォルトの名無しさん [04/12/20 23:31:57] xyyzzyってdefclass使えないの?
124 名前:デフォルトの名無しさん mailto:sage [04/12/21 00:56:45] >>118 CLISP, GCL, ABCL はどれも Windows 上で動きますが… Windows で CLISP + SLIME 環境を準備するのは難しいですか? Emacs + CLISP + SLIME をまとめたパッケージが欲しいという レベル?インストーラを作ったら需要があるのかなぁ. # CMUCL, SBCL も Windows 対応が進行中ですし. # 特に見放されては居ないとおもいますが. >>123 xyzzy は ANSI CL じゃなくてその前の CLtL2 ベースですから defclass はありません.
125 名前:デフォルトの名無しさん mailto:sage [04/12/21 08:21:37] >>124 手軽にlispやりたいひとには需要あるんじゃない? 選択肢が増える。 >>123 defclassは自分で実装しろ
126 名前:デフォルトの名無しさん mailto:sage [04/12/21 08:43:27] >>124 > Emacs + CLISP + SLIME をまとめたパッケージが欲しいという > レベル?インストーラを作ったら需要があるのかなぁ. それは117が言っているように"Lisp in a box"としてすでに存在するので、 それのEmacsをMeadowに変更してくれと言う事ではないかな?
127 名前:デフォルトの名無しさん mailto:sage [04/12/21 12:57:06] >>124 > CLISP, GCL, ABCL はどれも Windows 上で動きますが… CLtL2 キボン.さらに Windows で動いて, しかも日本語も安心して使えないと困ります.clisp はダメぽ. ビルドの仕方だけの問題なのかな? どなたか japanese にやさしい clisp-win32 バイナリください m(__)m lisp じゃないけど,windows 用ってなぜかインストーラ付きばかりですよね. administrator 権限が無いマシンでは試すことさえできません. 大学の設備でプログラミングがやりずらいなんて...orz
128 名前:デフォルトの名無しさん [04/12/21 22:53:28] 質問です。 "0"を任意の数だけ表示する関数を教えてください。 (setq i 0) (while (< i 32) (print "0")(setq i (+ i 1))) で上手くいかない・・・
129 名前:デフォルトの名無しさん [04/12/21 22:59:54] WindowsではCMUCLって使えないの?
130 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:01:04] 使えるけど
131 名前:デフォルトの名無しさん [04/12/21 23:01:51] cygwinの上で、とか無しで
132 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:28:38] >>128 任意個の"0"を並べた文字列をつくる それを表示する
133 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:50:59] 私、初心者ですが、恐れながら一言、言わせて板抱きます。 >>132 lisp ですから、文字列ではなく、リストを使うべきではないでしょうか? 例 (mapcar #'princ '("0" "0" "0"))
134 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:51:52] なぜ128でうまくいかないか考えたまえ。
135 名前:133 mailto:sage [04/12/21 23:53:16] すいません。 " なしで。 (mapcar #'princ '(0 0 0))
136 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:54:56] 任意個に挑んで。
137 名前:デフォルトの名無しさん [04/12/22 00:24:42] XYZZYでバイトコンパイルしたものはJAVAから呼べないの?
138 名前:デフォルトの名無しさん mailto:sage [04/12/22 00:30:54] >>126 うぐ,自分は NT Emacs 使いなので…メイン環境が FreeBSD なんで site-lisp とか共有する都合上 NT Emacs ですが,Meadow のが良いんですかね? >>127 CLtL2 よりは HyperSpec のほうが…あれ?ライセンスは良いのかな? CLISP は一番多言語サポートが良いと思いますが.あー Windows だと ビルド環境整えるのが面倒なんで日本語サポートは….
139 名前:デフォルトの名無しさん mailto:sage [04/12/22 00:39:46] >>128 環境は何ですか? Common Lisp には標準では while はありません. n 個 0 を表示するには下記の方法から好きなものをどーぞ. ;; dotimes 構文 (defun f1 (n) (dotimes (i n) (princ n))) ;; do 構文 (defun f2 (n) (do ((i 0 (1+ i))) ;; i=0 を宣言し,ループ毎に i = (1+ i) してカウンタを増す ((= i n)) ;; i==n になったらループ停止 (princ 0))) ;; loop 構文 (defun f3 (n) (loop repeat n do (princ n))) ;; 再帰 (defun f4 (n) (cond ((= n 0) (princ 0)) (t (princ 0) (f4 (- n 1)))))
140 名前:デフォルトの名無しさん [04/12/22 00:56:30] >>139 をを、ありがとうございます。 でわdoを戴きます
141 名前:デフォルトの名無しさん mailto:sage [04/12/22 01:34:52] どうでもいいが >>140 さんの環境は何だったのでしょう? >>133 N 回の繰り返す時必要な情報は「何回繰り返したか?」という数値一つで良いですし、 結果も画面表示が得られれば良いだけなので「リストを使うべき」というほどでも ありませんね。まぁ、mapcar を使うとすると (defun zerozero (n) (mapcar #'princ (make-list n :initial-element 0))) でしょうか?mapcar は結果として 0 が n 個はいったのリストを返しますが、 これは表示のためだけにはちょっと勿体ないかもしれません。 Lisp だから List という考えかたではなく、状況によって適切なデータ構造は 何か?を考えるようにすると上達がはやいと思います。 >>137 呼べません。バイトコンパイルっつってもバイトコードの体系が違います。
142 名前:132 mailto:sage [04/12/22 08:14:46] (princ (make-string count :initial-element #\0)) >>128 の例に出てくるようなオーダーならこれで十分でしょ。 多分一番早いし速い。 数がでかいのに対応したきゃ適当な単位に分ければよし。
143 名前:デフォルトの名無しさん mailto:sage [04/12/22 09:37:00] >>133 Lispだからリストを使うべきってすごい思い込みだ CommonLispには他にも配列やら構造体やらクラスやらいろいろあるよ あるものは使わなきゃ
144 名前:デフォルトの名無しさん [04/12/23 16:47:10] CMUCLはネイティブコンパイルができるらしい。 他にネイティブコンパイルできるものはないのか? Windows限定で(ACLなしで)
145 名前:デフォルトの名無しさん mailto:sage [04/12/23 17:32:01] (setf str (if t "+" "-")) (setf sym (if nil '+ '-)) (funcall (string->function str) 1 2) ; => 3 (funcall (symbol->function sym) 1 2) ; => -1 のようなことをするにはどうしたらよいですか? 引数として与えられた文字列やsymbolにバインドされた関数 を返す関数を使いたいのてす。
146 名前:デフォルトの名無しさん mailto:sage [04/12/23 17:33:49] intern, symbol-value, symbol-function
147 名前:デフォルトの名無しさん mailto:sage [04/12/23 17:37:40] それだ!すげー速いレスthnx
148 名前:デフォルトの名無しさん mailto:sage [04/12/23 19:18:05] >>144 LispWorksは?
149 名前:デフォルトの名無しさん mailto:sage [04/12/23 19:45:46] (funcall sym 1 2)で動くんじゃないの?
150 名前:デフォルトの名無しさん mailto:sage [04/12/23 21:14:30] >>144 ありますよ LispWorks $1100 Corman Common Lisp $200 (非商用フリー) GCL Free ECL Free ってとこでしょうか
151 名前:デフォルトの名無しさん mailto:sage [04/12/24 00:31:23] >>144 なんでACLは除外なの?
152 名前:デフォルトの名無しさん [04/12/24 00:34:03] >151 高すぎるから。 GCLとかよさそう。 GUIつきとかないかな
153 名前:デフォルトの名無しさん mailto:sage [04/12/24 00:37:14] >>152 $599(62,000円)からあるけど。
154 名前:デフォルトの名無しさん mailto:sage [04/12/24 00:52:17] >>150 日本語が通るのはLispWorksだけ?
155 名前:デフォルトの名無しさん mailto:sage [04/12/24 11:38:55] >>154 > 日本語が通るのはLispWorksだけ? たぶんそう。ただ上記にリストアップされていない、JVM上で動作するABCL(Armed Bear Common Lisp)は 日本語通りそうな気もする。だれか試していない?
156 名前:デフォルトの名無しさん mailto:sage [04/12/24 16:57:08] オマエガタメセ
157 名前:デフォルトの名無しさん mailto:sage [04/12/24 20:10:33] >>155 (length "いろは") => 6だって。設定次第でどうにかなるのかな?
158 名前:デフォルトの名無しさん mailto:sage [04/12/24 22:12:24] >>157 ウニコードだからむりぽ。 LispWorks, ACL も3が蛙。
159 名前:デフォルトの名無しさん mailto:sage [04/12/25 01:15:19] 文字列→symbol→bindされた関数→適用 するのにCommonLispでは (funcall (intern "+") 1 2) schemeだと ((eval (string->symbol "+") (scheme-report-environment 5)) 1 2) こんなのしか書けなかった。もっとましな書き方があるはずですよね。
160 名前:デフォルトの名無しさん mailto:sage [04/12/25 01:29:56] intern 相当がschemeにはないからな
161 名前:デフォルトの名無しさん [04/12/25 22:50:04] 色々あったが、一応社内の小規模アプリをACLで書く許可が出た。 これをパイロットPJとして、使い勝手、速度、仕様変更対応コストなど データを取る予定。
162 名前:デフォルトの名無しさん mailto:sage [04/12/25 23:59:11] どんなことがあったの?
163 名前:デフォルトの名無しさん mailto:sage [04/12/26 12:05:05] >>161 小規模1人プロジエクトじゃデータにならんと思われ。
164 名前:デフォルトの名無しさん [04/12/26 18:20:13] 「Lispの表記をUML拡張できないか?詳細なものを」by課長 殺すしかねぇな
165 名前:デフォルトの名無しさん mailto:sage [04/12/26 19:21:11] COBOLのほうがまだましだな。
166 名前:デフォルトの名無しさん mailto:sage [04/12/26 21:52:19] >>164 何か問題でも?
167 名前:デフォルトの名無しさん mailto:sage [04/12/26 22:20:50] >>166 殺人は犯罪ですから。
168 名前:デフォルトの名無しさん mailto:sage [04/12/26 22:58:58] UMLでlispを書け、というのはわからんでもない。 一応UML2.0の読み書きぐらいなら仕事で使うレベルならば困らない。 が、私はスリーアミーゴスでもメラーでもケントベックでも、ファウラー でもない。 「lispコードを読み込んで、UMLを作成するtool」なんざ作れん。 んな技術あったらラショナルに転職するわい。 だいたいLisp用にUMLを拡張するだけでも私の手に余るってんだよ。
169 名前:デフォルトの名無しさん mailto:sage [04/12/27 00:48:07] >>167 社会的に抹殺してやれば団塊世代なんて直ぐに自殺しますよ。意外と軟弱。
170 名前:デフォルトの名無しさん mailto:sage [04/12/27 02:02:28] 物騒な話はヨソでやるよろし。
171 名前:デフォルトの名無しさん mailto:sage [04/12/27 02:18:25] LISPコードはマクロのせいで、全部展開しないとパースは無理だから 機械的に意味を抽出できても意図とはかけ離れたものになると思う コンパイラを1つ作るようなもの
172 名前:デフォルトの名無しさん mailto:sage [04/12/27 11:03:26] macroexpandすればいいだけやん。 どのみちLispのコンパイラなんて簡単に書けるんだから そう大層に言うほどのことじゃない。
173 名前:デフォルトの名無しさん mailto:sage [04/12/27 14:42:32] いやだから、macroexpandした後の内容でいいのかって話
174 名前:デフォルトの名無しさん mailto:sage [04/12/27 14:53:07] ? 着目したい構造がマクロで定義されているんだったらそれはmacroexpandせずに 残せばいい話でしょ? 選択的にmacroexpandするようなのはコンパイラなんて気負うまでもなく書けるでしょ。 C/C++のcppマクロなんかとはわけが違うよ?
175 名前:デフォルトの名無しさん [04/12/27 19:55:00] 問題はdefmacroの扱い方以前に、defunでもdefmethodでも defclassでもdefgenericでもいいのだが、それらをクラス図で扱うと言うの なら、UMLをLisp用に拡張しなければならないということだ。 言語事態があまりにもC#やJAVAとはかけ離れすぎているから、 メタクラス使って拡張してXMI対応もしなければならない。 これを三人(私+新人二人)で、一月ではキツくねぇだろうかと、 思った次第(このtool自体をLispで書けは流石に無茶だろう)。
176 名前:デフォルトの名無しさん mailto:sage [04/12/27 23:58:31] >>175 ふと思ったんだが、その課長さんUMLとXMLと勘違いしていないかい? どっかで「LISPでプログラム書いてXMLに変換するのはナウいですよ」とか言われて... 課長さん、忘れない様にブツブツ言いながら帰ってくる途中に XML XML XML ... <地下鉄の中><居眠り><ドトールでコヒー> ... UML UML UML ってなぐあい。あり得ないかもしれんが、そうであることを君のために祈っているよ(笑
177 名前:デフォルトの名無しさん mailto:sage [04/12/28 08:20:49] >UMLをLisp用に拡張しなければならないということだ やってみたら? もし出来たら発表してよ。
178 名前:デフォルトの名無しさん mailto:sage [04/12/28 23:27:44] 仕事で使うものをここで発表なんかするかよ
179 名前:デフォルトの名無しさん [04/12/31 07:25:57] arcっていつ出るの?
180 名前:デフォルトの名無しさん mailto:sage [04/12/31 08:20:24] arcはグラハムの脳内言語ですが何か? 奴に処理系作る時間は無いかと
181 名前:デフォルトの名無しさん mailto:sage [04/12/31 09:29:01] じゃあグレアムは普段何やってんだろ。 働かなくても食っていける資産はあるだろ。 まさかエッセイばかり書いているわけでもあるまい。
182 名前:デフォルトの名無しさん mailto:sage [04/12/31 10:33:04] グレアムって誰?
183 名前:デフォルトの名無しさん mailto:sage [04/12/31 10:50:40] Paul Graham ポール グレアム ポール グラハム どっちが正しい?
184 名前:デフォルトの名無しさん mailto:sage [04/12/31 10:51:18] つか、香具師はフランス人?
185 名前:デフォルトの名無しさん mailto:sage [04/12/31 11:15:02] アメリカのLisperと話す時は「グレアム」で通じるけど。 「グラハム」って呼んでる人は会ったことない。
186 名前:デフォルトの名無しさん mailto:sage [04/12/31 12:04:25] グリィォムだな。
187 名前:デフォルトの名無しさん mailto:sage [04/12/31 12:14:09] ∧_∧ (゚∀゚ )ー┐ グレアムグレアム! しヽ し′ 彡 > 彡) / / / (_(__) ∧_∧ ┌ー( ゚∀゚)グレアムグレアム! 丶J /J ( ミ < ミ 丶 丶 丶 (__)_)
188 名前:デフォルトの名無しさん mailto:sage [04/12/31 13:08:55] 食べすぎの日記にも出てきませんね. 資産があって暇なら数値計算にも手を出して,文書を書いて欲しいです.
189 名前:デフォルトの名無しさん mailto:sage [05/01/01 03:48:01] 奴はLISP処理系を1から作るなんてことはしない CommonLispのラッパーみたいなので済まそうと考えてるヘタレ どう見てもarcは破綻してるだろ
190 名前:デフォルトの名無しさん [05/01/01 04:52:28] arcってよく知らんのだが、CLと何が違うの? ラップでもなんでもいいんだが、ただの方言でしかないのか?
191 名前:デフォルトの名無しさん mailto:sage [05/01/01 05:19:25] >>190 www.paulgraham.com/arcll1.html www.paulgraham.com/ilc03.html この辺を読んでイメージをつかんでくれ、と言いたいところだけれど、 原理的なところと実用的なところの話がごっちゃに出てきてて、 いまいちはっきりしないのは確かだな。 一応、かつて上記のを読んで印象に残ってるのは、 名前空間はひとつ、てのとマクロをオプションで実行時展開できるようにする、 て話かなあ、CL と違うってことだと。 まあ、基本的には Lisp は Lisp なんで糖衣構文で何とかならない? 的なネタもある、というか多いけれど。 あとはインデントに構文的な意味を与える、とかもあったかな。