1 名前:デフォルトの名無しさん mailto:sage [04/02/01 19:10] 過去スレ Part1: piza2.2ch.net/tech/kako/987/987169286.html Part2: pc.2ch.net/test/read.cgi/tech/1002584344/ Part3: pc.2ch.net/test/read.cgi/tech/1008220265/ Part4: pc.2ch.net/test/read.cgi/tech/1016211619/ Part5: pc3.2ch.net/test/read.cgi/tech/1023091882/ Part6: pc3.2ch.net/test/read.cgi/tech/1031560687/ Part7: ruku.qp.tc/dat2ch/0311/20/1042167213.html Part8: pc2.2ch.net/test/read.cgi/tech/1058263391/ Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ 前、"Schemeスレはあるのになんでcommonlispスレはないの?"とか言って別のスレを建てた大馬鹿者がいたので、 標題にCommonLispと付けておきました。 Lispの話題でCommonLisp,Scheme,EmacsLisp(専用スレッドがある)以外のものが出ることはこのスレの歴史上でも 稀なので問題はほとんどないかと思います。 関連リンクは>>2-10 あたり
196 名前:189 mailto:sage [04/02/23 00:21] >>194 すみません、調べてみたら destructuring-bind よりもっと複雑な仕様でした。 例えば (dbind* '(a (2 3 4)) (('a (b 3 c)) (+ b c))) がマッチして、6 が返されます。 シンボル以外のアトムや quote されたシンボルをネストした S 式の中に書くことができ、 パターンの同じ場所に eq になるアトムが存在するときに、マッチするものと見なされます。 上の例の 3 や a がそれです。このとき、a はシンボル a に束縛されます。
197 名前:デフォルトの名無しさん mailto:sage [04/02/23 01:50] >>196 ふむ、若干面倒だね。とりあえず、パターンのシンボルに リストがマッチするものとして書いてみた。 (defun match (vars vals) (do ((vars vars (cdr vars)) (vals vals (cdr vals))) ((or (null vars) (null vals)) (not (or vars vals))) (let ((var (car vars)) (val (car vals))) (unless (cond ((eq var val) t) ((symbolp var) t) ((atom var) nil) ((eq (car var) 'quote) (eq (cadr var) val)) ((atom val) nil) (t (match var val))) (return)))))
198 名前:197 mailto:sage [04/02/23 01:50] 続き (defmacro dbind* (list &body forms) (let ((dummy (gensym)) (vals (gensym))) (labels ((bind (vars vals) (mapcan #'(lambda (var) (cond ((atom var) `((,(if (symbolp var) var dummy) (pop ,vals)))) ((eq (car var) 'quote) `((,(if (symbolp (cadr var)) (cadr var) dummy) (pop ,vals)))) (t (let ((temp (gensym))) `((,temp (pop ,vals)) ,@(bind var temp)))))) vars))) `(let ((,vals ,list)) (cond ,@(mapcar #'(lambda (form) (let ((vars (car form))) `((match ',vars ,vals) (let* (,@(bind vars vals)) ,@(cdr form))))) forms))))))
199 名前:デフォルトの名無しさん mailto:sage [04/02/23 05:51] Gauche0.7.4.1をインストールして (string-concatenate-reverse '(" must be" "Hello, I") " going.XXXX" 7) っていう式を評価させたらエラーになったんだけど、 SRFI-13ではそういう実装も許されてるの? それともインストール失敗しただけ?
200 名前:デフォルトの名無しさん mailto:sage [04/02/23 06:21] >>199 バグじゃん? wilikiにでも報告するよろし。
201 名前:デフォルトの名無しさん [04/02/23 18:37] perlのスクリプトとをgaucheに移植してるんだけど perlとgaucheの対応表なんてどっかにありませんか。 とりあえず open(STDERR, ">&STDOUT") $| = 1 $! がわからない。
202 名前:デフォルトの名無しさん mailto:sage [04/02/23 22:40] >>199 ttp://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj_236.html optionalついてないのがGaucheでの仕様なんじゃないの?
203 名前:デフォルトの名無しさん mailto:sage [04/02/25 19:07] つーかトランスレーター作ろうぜ perlよくわからない
204 名前:デフォルトの名無しさん mailto:sage [04/02/25 20:51] Perl を勉強して書き直すほうがためになるよ。きっと。
205 名前:デフォルトの名無しさん mailto:sage [04/02/25 21:07] Perlを知らずにトランスレータもないだろうに
206 名前:デフォルトの名無しさん mailto:sage [04/02/26 00:12] >>201 $| = 1 と $! の例を強引に考えてみた(dup は不明)。詳しい人のフォロー希望。 (with-error-handler (lambda (e) ;; e は例外オブジェクト($! のようなもの) (format (current-error-port) "ERROR: ~a¥n" (ref e 'message))) (lambda () ;;(with-input-from-file *program-name* ;; 正常パターン (with-input-from-file "nowhere file" ;; エラーパターン (lambda () (set! (port-buffering (current-output-port)) :full) ;; $| = 1 ? (port-for-each (lambda (line) (display line) (newline)) read-line))))) C がわかるなら、リファレンスの C と Scheme の対応一覧が役に立つかも。
207 名前:デフォルトの名無しさん mailto:sage [04/02/26 10:34] 勘で。 ---- $|=1; open IN, "foo.pl"; print while (<IN>); ----- (call-with-input-file "foo.scm" (lambda (in) (copy-port in (current-output-port))) :buffering :none)
208 名前:こゆことかな...? mailto:sage [04/02/26 11:29] ------------------------------ #!/path/to/gosh (display "Content-type: text/plain\r\n\r\n") (display "Test.\r\n") (with-error-handler (lambda (e) (print #`"***ERROR: ,(ref e 'message)") (exit 1)) (lambda () (with-input-from-file "no_such_file" (lambda () (print "File opend."))) )) ------------------------------ #!/path/to/perl open(STDERR, ">&STDOUT"); $| = 1; print "Content-type: text/html\n\n"; print "This is a test.<BR>"; open(IN, "no_such_file") || die "***ERROR: ", $!; close(IN);
209 名前:デフォルトの名無しさん mailto:sage [04/02/26 15:25] 恐れ入ります。 簡単に行かないというのがわかりました。 dup と flush は gosh本体に仕込んで起動時オプションで処理する。 $! もグローバル変数に組み込んでしまうのが簡単か
210 名前:デフォルトの名無しさん mailto:sage [04/02/27 00:11] 別の言語なんだし全部直訳はできないのは当然じゃん。 いろいろ解説してくれた人がいたんで代わりにまとめ。 open(STDERR, ">& STDOUT") なら (with-error-to-port (current-output-port) THUNK) $| = 1 じゃなくて autoflush を使うべきなんで ((setter port-buffering) PORT :none) $! でメッセージが欲しいのなら with-error-handler でエラーをキャッチして (slot-ref ERR 'message)。 これは eval で die をキャッチするのをイメージ。
211 名前:189 mailto:sage [04/02/27 08:09] >>197-198 ありがとうございました。遅くなりましたが、自分の欲しい内容への改造が やっとできたのでお伝えします。 比較対象がアトムやquoteされたアトムの場合の動作を改善するため、 トップレベルだけを別扱いにすることにしました。 (defun match0 (vars vals) (cond ((symbolp vars) t) ((atom vars) (eq vars vals)) ((atom vals) (and (eq (car vars) 'quote) (null (cddr vars)) (eq (cadr vars) vals))) ((eq (car vars) 'quote) nil) (t (match vars vals)))) という関数を追加し、dbind* の labels で定義している局所関数にも ((bind0 (vars vals) (cond ((atom vars) (if (symbolp vars) `((,vars ,vals)) `((,dummy ,vals)))) ((eq (car vars) 'quote) `((,dummy ,vals))) (t (bind vars vals)))) という定義を追加します。そして dbind* 末尾から3,4行目の `((match ',vars ,vals) (let* (,@(bind vars vals)) をそれぞれmatch0, bind0 の呼び出しに置き換えます。 動作の変わった例としては、以下のようなものがあります。 (dbind* 3 ((4) 5)) ; エラーにならずにnilを返すようになった (dbind* '(3 7) (any any)) ; (3 7) を返すようになった (dbind* '(3 7) ('any t) ; 7 を返していたのがnilを返すようになった
212 名前:嵩 [04/02/27 16:48] 131 : :04/02/10 19:06 (define make-structure (lambda (n) (lambda (d) (lambda (m) ((m n) d))))) (define select (lambda (c) (c (lambda (a) (lambda (b) a))))) の意味がいまいちわかりません。 例えば、 (select ((make-structure (+ 7 5)) (- 9 3))) とした時のラムダ計算の課程を教えてくれませんか。 132 :デフォルトの名無しさん :04/02/10 19:17 >>131 n := 7 + 5 => 12 d := 9 - 3 => 6 c := (lambda (m) ((m 12) 6)) => #<closure> m := (lambda (a) (lambda (b) a)) => #<closure> a := 12 => 12 b := 6 => 6 => 12 となっているけど、もう少し詳しく説明できる人いますか? ラムダ計算が今一よくわからないもんで。
213 名前:デフォルトの名無しさん mailto:sage [04/02/27 16:54] >>212 詳しく説明できるが 聞 き 方 が 気 に 食 わ な い
214 名前:デフォルトの名無しさん mailto:sage [04/02/27 17:09] 関数適用で束縛変数を引数で置き換えればいいんだよ。
215 名前:デフォルトの名無しさん mailto:sage [04/02/27 17:18] make-structure = λn.λd.λm.((m n) d) select = λc.(c λa.λb.a) (select ((make-structure (+ 7 5)) (- 9 3))) = (select ((make-structure 12) 6)) = (select ((λn.λd.λm.((m n) d) 12) 6)) ; nを消す = (select (λd.λm.((m 12) d) 6)) ; dを消す = (select λm.((m 12) 6)) = (λc.(c λa.λb.a) λm.((m 12) 6)) ; cを消す = (λm.((m 12) 6) λa.λb.a) ; mを消す = ((λa.λb.a 12) 6) ; aを消す = (λb.12 6) ; bを消す = 12
216 名前:デフォルトの名無しさん [04/02/27 23:36] 私はslot-refでCLOS止めました letで囲めばいいじゃん!
217 名前:デフォルトの名無しさん [04/02/28 02:39] なんか物凄い基本的なことかもしれないですが、 Schemeの末尾再帰の動きが良くわからないのです。 どなたか教えてくださいませんか (define fact-tail (lambda(n x)(if( (= n 0) x (fact-tail(- n 1)(* n x))))) 階乗を求めようとしているのはわかりますが、 これに対して、(fact-tail 5 1) を与えたら何で120が導けるのかいまいちわからないです。 (fact-tail 3 1) として どういう風に再帰展開されるのかわかるかた 教えていただけませんでしょうか。
218 名前:デフォルトの名無しさん mailto:sage [04/02/28 02:48] >>217 1ステップずつ考えれば分かるだろ
219 名前:デフォルトの名無しさん mailto:sage [04/02/28 02:50] >>217 (fact-tail 3 1) (fact-tail (- 3 1) (* 3 1)) (fact-tail 2 3) (fact-tail (- 2 1) (* 2 3)) (fact-tail 1 6) (fact-tail (- 1 1) (* 1 6)) (fact-tail 0 6) (= n 0) が真になるので 6 を返す 末尾再帰は C などの for ループと本質的に同じ int fact(int n){ int x=1; for(; n--; 0!=n) x*=n; return x }
220 名前:217 [04/02/28 03:05] >>219 ありがとうございます。ぼけてました。引用もとの文には (if (= n 0) x と書いてあるのに手持ちのメモに (if (= n 0) 1 と書き写してしまいそっちをみていてはまってしまいました すっきりしました。おさわがせしてすみません。
221 名前:217 [04/02/28 03:11] >>219 引用元はSoftwareDesign の2000年9月号のScheme特集でした。 「末尾再帰を使うとスタックを消費しない」 と書いてあったけどイメージしにくかったんですが for ループに対応してると考えるとわかりやすいですね。
222 名前:デフォルトの名無しさん mailto:sage [04/02/28 11:34] 繰り返しを末尾再帰に直すと、変数代入の様な 明示的副作用を書なくて良いというのがあって、 Schemeではset!をほとんど使わずにコードが書ける。
223 名前:デフォルトの名無しさん mailto:sage [04/02/28 12:18] schemeに限ったことじゃないような。 まあ、"俺Lisp"的な実装はは末尾再帰最適化がなかったりするけど。
224 名前:デフォルトの名無しさん mailto:sage [04/02/28 13:18] >>223 Schemeは言語仕様上いつでも安心して使えるってことだよ。 例えばtail recursionがproperじゃないCommonLispで 「常に末尾再帰を意識しながら書く」って奴がいるとも思えないが。
225 名前:デフォルトの名無しさん mailto:sage [04/02/28 15:41] >>216 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか? >>224 大抵のプログラマは意識はしてると思いますが。 末尾再帰の話が出てこない CL の入門書は見たことないですし。 CL だと最適化オプション下げれば末尾再帰の最適化が OFF になってデバッグしやすくなるし。
226 名前:デフォルトの名無しさん mailto:sage [04/02/28 16:08] Emacs LispやCommon Lispを主に使って、Schemeはあまり使わない俺の場合だと、 再帰呼び出しが末尾にあるかどうかは最初はほとんど気にしません。 読みやすさや見ための綺麗さを優先して最初はコーディングします。 再帰を使う時は、スタックの消費量が問題になるほど、呼び出しが深くなるか どうかには注意します。そして、CLを使っているときは、もし再帰呼び出しが 末尾位置にあれば、ああ、スタックの消費量を気にしなくてもいいかな、という 考えが頭に浮かびます。
227 名前:225 mailto:sage [04/02/28 16:16] > 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか? いかん、丁寧に直したら副作用で日本語が壊れている…… >>226 末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。
228 名前:デフォルトの名無しさん mailto:sage [04/02/28 16:22] >>227 >末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。 R5RSに定義されている「末尾位置」のつもりだったんですけど?
229 名前:デフォルトの名無しさん [04/02/28 16:45] >>227 > 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか? あんた、いい人だ! でもgoshに無いのでやっぱりCLOS止め
230 名前:デフォルトの名無しさん mailto:sage [04/02/28 16:54] >>228 スマン。末尾位置ってはじめて聞いたもんで。tail context の事なのか? >>229 なんだそりゃ! 無いならお前が作れ!
231 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:07] >>230 > tail context の事なのか? そうです。不正確でしたね失礼しました。今、R5RSで確認したんですけど、 tail contextが正しい用語みたいですね。覚えておこう。ちなみにtail contextの 日本語定訳はあるのかな? gaucheでゴーシュ。俺はしばらく「ガウチェ」と発音していたよ。
232 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:07] >>225 末尾呼び出しを思いっきり使えるかどうかって、 コーティングスタイルがまるで変わってくると思うんですが、 >ttp://www.swiss.ai.mit.edu/~jaffer/hobbit_4.html (define (cpstak x y z) (define (tak x y z k) (if (not (< y x)) (k z) (tak (- x 1) y z (lambda (v1) (tak (- y 1) z x (lambda (v2) (tak (- z 1) x y (lambda (v3) (tak v1 v2 v3 k))))))))) (tak x y z (lambda (a) a))) ;;; call: (cpstak 18 12 6) たとえばこういう内包挟んだ末尾再帰もCommonLispコンパイラが ちゃんと末尾として認識するのかなと。
233 名前:デフォルトの名無しさん [04/02/28 17:18] >>230 いや、おれは「letで囲めば良い」を布教させる事に全力を傾けたい だから、もう一度、キョンキョンにこの歌を歌ってもらおう (キョンキョン)おまえら!一緒に歌ってくださーい ♪defineの次に、letで囲めばぁー いーじゃん♪ (見逃してくれよー) いーじゃん♪ (見逃してくれよー) ♪作ったlambdaの引数はいつもこれ→(msg . args) いーじゃん♪ (メッセージ送れよー) いーじゃん♪ (メッセージ送れよー) (キョンキョン)よし、分かったな。じゃあ解散!
234 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:22] ↑バカ?
235 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:24] >>232 大抵のコンパイラは普通に認識するよ。
236 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:25] 徹夜で気でも狂ったか?
237 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:30] ワロタ
238 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:32] >>232 俺はこういうコーディングは思いつかないと思うけど、schemerの人って こういうコーディングをよくするの? 見ためは、綺麗だよね。
239 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:37] >>232 そういうコードが安心して使えるかどうかっていうと駄目だろ。 CommonLispはコンパイラの最適化って点でインプリメンタの気まぐれなわけだし。 コーティングスタイルにまでは及ばない。
240 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:39] >>238 CPS(232みたいなk=continuationを渡していくやつ)はよく使うよ。
241 名前:デフォルトの名無しさん [04/02/28 17:40] ♪defineの次に、letで囲めばぁー
242 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:41] 春はまだ先だぞ
243 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:44] 最適化部分は処理系依存なだけで。 C とかだって最適化は規格で決まってなくても プログラマは処理系のマニュアル見て安心して使うだろう?末尾再帰の最適化が完全 に良い事づくめなら Scheme みたいに規格で決めちゃってもいいかもしれんけど,デ バッグがやりにくくなるからなぁ…… でも普通は処理系が対応してりゃ安心して使えるだろう。大抵のコンパイラは末尾再 帰の最適化機能を備えているわけだ。以前 c.l.l でも出ていたがやっぱ最適化オプ ションに「末尾再帰の最適化」を設けるべきだろうなぁ。規格以外は一切使わないと いうポリシーもありだと思うけどね。
244 名前:sage [04/02/28 17:45] (見逃してやれよー)
245 名前:デフォルトの名無しさん mailto:sage [04/02/28 17:55] >>243 デバッグがやりにくくなる? どんなデバッグしてるのさ ログ出すだけじゃないの?
246 名前:デフォルトの名無しさん mailto:sage [04/02/28 18:40] アセンブラ出力しておっかけてるんだろ
247 名前:デフォルトの名無しさん mailto:sage [04/02/28 18:56] xyzzy で tail recursion が遅いのは大変残念な思いがします.
248 名前:デフォルトの名無しさん mailto:sage [04/02/28 18:56] 関数トレースしたり、エラーがでたらバックトレースみたり、 スタックフレームのぞくだけだけど…。ひょっとして「ログ出す」 ってのが普通なの?漏れ Lisp の正規の教育受けてないので 常識には自身がないんだよね。
249 名前:デフォルトの名無しさん mailto:sage [04/02/28 18:58] s/自身/自信/ どうやら国語も勉強しなおしたほうがいいようだ。吊ってくるわ。
250 名前:デフォルトの名無しさん mailto:sage [04/02/28 19:06] 所詮はエディタだし。
251 名前:デフォルトの名無しさん mailto:sage [04/02/28 19:08] Lispの正規の教育受けてる人なんてほとんどいないだろ。 Java/C/C++でさえ書籍orWebの情報だけでやっていく人がたくさんいるし。
252 名前:デフォルトの名無しさん mailto:sage [04/02/28 20:55] 正規の教育ってなんだ?(w
253 名前:デフォルトの名無しさん mailto:sage [04/02/28 21:14] >>245 のデバッグ手法を教えてください。漏れも最適化したらデバッグ用 情報が減るのは当たり前だと思ってたんだけど。Scheme では関数呼び出し 情報とかはあんまりデバッグに使わないんですか?
254 名前:デフォルトの名無しさん mailto:sage [04/02/28 22:17] schemeも、トレース実行すると末尾再帰の呼び出しが 普通の再帰みたくツリー上に出るんじゃない? デバッグでなんか大きな違いってあるの?
255 名前:デフォルトの名無しさん mailto:sage [04/02/29 01:09] >>253 ログ出しについての説明か? ループの中で変化する変数を表示するだけですが。
256 名前:デフォルトの名無しさん mailto:sage [04/02/29 13:11] >>254 え、何という処理系ですか?デバッグ周りって処理系依存ですよね。 トレース実行って特定の関数だけとか全体とか指定できるんですか? >>255 それだけじゃキツイなぁ。再帰がふか〜い所でエラーな時とか。 やっぱエラーになってデバッガが立ち上がったところから手繰って いけたほうが便利だと思いますが。私の使ってる処理系は debug レベル を 2 以上にすると末尾再帰の最適化が行われなくなるのでエラーに なった時点からフレームをたどっていけますが…。
257 名前:デフォルトの名無しさん mailto:sage [04/02/29 13:50] traceなら処理系というかマクロでできるよ
258 名前:デフォルトの名無しさん mailto:sage [04/02/29 15:53] デバッグがらみの話題で、処理の流れを目で追うことができるソースレベルデバッガが 売り物の処理系でも付いていないというのは、要望が少ないからなのかな? たしかに バックトレースの表示などの伝統的なやり方でもデバッグできるけどね。あと、要所 要所に(format t "my-var = ~S~%" my-var)を挿入とか。俺はPerlでもこのやり方で デバッグするね。Data::Dumperという便利なものもあるし。 俺はEmacs Lispではソースレベルデバッガであるedebugをもっぱら使ってdebugはほとんど 使ったことがない。
259 名前:デフォルトの名無しさん mailto:sage [04/02/29 16:39] stepじゃ駄目なの?
260 名前:デフォルトの名無しさん mailto:sage [04/02/29 16:53] >>259 いや、stepでもたぶん同じことができると思うけど、エディタでコード全体を 見渡しながらデバッグできると気持がいいんだよね。ついでに、監視したい式なんかを 複数登録しておいて常時、その値を表示させておくとか。ブレーク時に画面上で変数の 上にマウスポインタを置くだけで、値が表示されるとか。 つまり、昔かたぎの人からみれば、俺は現在のIDEに毒されているヘタレということか。プ
261 名前:デフォルトの名無しさん mailto:sage [04/02/29 17:53] slimeに期待かな。 現時点でもエラー箇所の表示とか凝ったことできるし。
262 名前:デフォルトの名無しさん mailto:sage [04/02/29 18:10] 名前がスライムっぽくて嫌
263 名前:デフォルトの名無しさん mailto:sage [04/02/29 19:34] メタルスライムがあらわれた メタルスライムAは逃げ出した
264 名前:デフォルトの名無しさん mailto:sage [04/02/29 20:05] バックトレースってデバッグでは便利だと思うんだけど Scheme の人は 要らないのかな?拾ってきたプログラムがエラー吐いてとまったときと かバックトレースが空だとちょっと悲しいんだけど。 >>257 なんか安心して使える trace の実装とかあります?処理系によっては 付いてるみたいだけど。付いてないのも結構あるので困るんですが。
265 名前:デフォルトの名無しさん mailto:sage [04/02/29 22:05] >>264 そういうのはどう転んでも処理系依存だしなあ。 いつでも外せるassertみたいなの埋め込むぐらいしか。 昔さわったminischemeのトレースはトレース対象を出力用の フック関数で挟む方式だった。後付けマクロ。 関数突入・脱出でトレース出力するので、 トレース対象関数は自然と末尾再帰が外れて山形の出力になる。 ただし内部関数、名無し関数には使えない。
266 名前:デフォルトの名無しさん [04/03/01 12:48] foo,bar,baz,mumble,glorp これって何に由来してんだぁ?
267 名前:デフォルトの名無しさん mailto:sage [04/03/01 13:21] >>266 foo と bar は RFC で定義されているよ
268 名前:デフォルトの名無しさん mailto:sage [04/03/01 14:02] RFCは冗談も混ざっているからなぁ。
269 名前:デフォルトの名無しさん [04/03/01 23:33] MLの有名な本より写経 A Lisp hacker says: 'Since the integers are a subset of the real numbers,the distinction between them is wholly artificial --foisted on us by hardware designers.ML should simply provide numbers, as Lisp does, and automaticaly use integers or reals as appropriate.' Do you agree? What considerations are there? MLerはいろいろ言うだろうが、Lisperはどう答える?
270 名前:デフォルトの名無しさん mailto:sage [04/03/02 00:00] なにを勿体つけてるんだ? ML for the working programmer の ex2.2 って言えばいいじゃん。翻訳もせずに丸投げなあたり宿題か何か? まぁ実際 ML にまでそうしろと言う Lisper は少ないと思うよ。 NetNews でも ML の数値周りが気に食わないと噛み付いてた Lisper は居たけど ML に Lisp 式の数値にしろ!とまで言うやつぁ少ないだろ。 理由はなんで ML がそうしてるかを考えればわかるだろ。
271 名前:デフォルトの名無しさん [04/03/02 00:08] まあ、そう熱くならんでも。 型無しのありがたみって何だろうな、というネタフリなんよ。
272 名前:デフォルトの名無しさん mailto:sage [04/03/02 00:36] 本からのコピペ程度でいちいち age るのがウザイんだよ。 ML スレでやれば?型無しのありがたみは無いってことでいいからさ。 デバッグ方法が聞けてウマーと思ってたのに、そんなつまらんネタ振るな。 だいたいここは Lisp 総合スレなんだ、型有りの Lisper 連中からすりゃ ハァ?って話題だろーが。全部の LISP 型無しという狭い見識をなんとか してから出直してきてくれ。
273 名前:デフォルトの名無しさん mailto:sage [04/03/02 00:37] dat 落ちした前スレを html 化してもらいました。 LISP Scheme Part9 ruku.qp.tc/dat2ch/0403/01/1069594582.html
274 名前:デフォルトの名無しさん [04/03/02 12:24] 強い型付けのないSchemeのような言語には 良いところもあるよなぁ、ということを言いたかった だけなんだがなぁ...
275 名前:デフォルトの名無しさん mailto:sage [04/03/02 12:49] まぁ、あんまり気にすんなや。
276 名前:デフォルトの名無しさん mailto:sage [04/03/02 19:09] 健全なマクロ VS 不健全なマクロ 1 :デフォルトの名無しさん :04/03/02 19:14 (ちょっと入れ子でスレ立たせてくれや) 健全なマクロって不便だし、不健全なマクロの貸しコートもささくれ立っていてなんかイヤ。 だから、健全なマクロに「不健全」ていうオプション欲しいよな? お前ら、どう思いますか。
277 名前:デフォルトの名無しさん mailto:sage [04/03/02 19:14] 健全なマクロ VS 不健全なマクロ 2 :デフォルトの名無しさん :04/03/02 19:15 2get
278 名前:デフォルトの名無しさん mailto:sage [04/03/02 19:16] 「不健全」というと健全なのより悪いイメージがあるからな〜。 個人的にはつまらないマクロと楽しいマクロだな。変数キャプチャ があった方がいろんな意味で楽しい。はまるとデバッグも愉快な事 になるしな。アヒャヒャヒャヒャ。
279 名前:デフォルトの名無しさん mailto:sage [04/03/02 19:20] define-unhygienic-syntax ;-)
280 名前:デフォルトの名無しさん mailto:sage [04/03/02 19:56] defmacro/define-macroの方が簡単だし構造見えるし作りやすい。 gensym命。でもSRFIのhygienicマクロそのまま読めない罠。 まあhygienic作る暇あったら正規表現でも統一しなさいってこった。
281 名前:デフォルトの名無しさん mailto:sage [04/03/02 20:28] >>278 define-boring-macro/define-amusing-macro とか? まぁ変数キャプチャを防いだところで世間の見る目はかわらんよね。 R... な言語の作者だってマクロはダメポって言ってたけどこれは 変数キャプチャ云々の話じゃないわけだし。
282 名前:デフォルトの名無しさん mailto:sage [04/03/02 22:08] >>281 世間の見る目って?どんな風に見られてるの? m@zはどうしてマクロはダメポって言ってるの?
283 名前:デフォルトの名無しさん mailto:sage [04/03/02 22:21] >>282 「神聖なる構文を一般利用者が触るなんてとんでもない。そんなの混乱の元だよ!」 ユーザビリティの問題だとかいってたあたりの事だと思われ。確認してないから 不正確かも知れんが探すのマンドクサ(括弧の話だったかも?)
284 名前:デフォルトの名無しさん mailto:sage [04/03/02 22:26] あのひとはユーザビリティって言葉好きだよね
285 名前:デフォルトの名無しさん mailto:sage [04/03/02 22:42] その割にRubyて妙な構文だらけだね え、LISPには劣るって!?
286 名前:デフォルトの名無しさん mailto:sage [04/03/02 23:02] あぁ!?神聖なる構文? しゃらくせえ。 おれ様が欲しいのは圧倒的な自由なんだよ! Schemeは聖域無き言語だぜ! ユーザビリティーだと? ヌルイ!ヌルイよそれ! ちょーヌルイよ! あーヌルイ。母さーん、火ぃつけてくれ。 ふぅー、ぬるぽ。
287 名前:デフォルトの名無しさん mailto:sage [04/03/02 23:05] C言語みたいな、ちょっと小汚い言語の方が好かれるかもなあ
288 名前:デフォルトの名無しさん mailto:sage [04/03/02 23:58] vimのVIlispってプラグインまともに動かせてる人いる? 設定のコツを教えてくれ。 \esで評価しようとするとvimが固まるんだけど…
289 名前:デフォルトの名無しさん mailto:sage [04/03/03 20:35] ( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >__Λ∩ _/し' //. V`Д´)/ (_フ彡 / ←>>286
290 名前:デフォルトの名無しさん mailto:sage [04/03/04 14:28] Lispをよく知る前は、Lispは再帰が命と聞いた。 ↓ Common Lispを習ったら、再帰はC++と同じくらいしか使わないなと思った。 ↓ Schemeを習ったら、「やっぱりLispは再帰が命?」と思った。
291 名前:デフォルトの名無しさん mailto:sage [04/03/04 14:39] CPS (continuation passing style)ってSchemerの人達が発明したコーディングスタイルなのかな? 末尾再帰の最適化が保証されていないと、いやがる人がいそうな書き方だよね。 実際は、メモリを結構積んでいるマシンが増えたから、再帰が多少深くなったって、困る場面ってそうそう ないような気もするけど。
292 名前:デフォルトの名無しさん mailto:sage [04/03/04 16:36] コンパイラ関連でよく出てくるよ>CPS
293 名前:デフォルトの名無しさん mailto:sage [04/03/04 23:34] >>291 CPS ってもう少し汎用的な概念だと思う。 state パターンも原始的な CPS だと言えなくもない。 末尾再帰を使うのはたまたま scheme が末尾再帰を正当化してくれているから。
294 名前:デフォルトの名無しさん mailto:sage [04/03/05 13:44] www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm > System Class STANDARD-CLASS > Class Precedence List: standard-class, class, standard-object, t (subtypep 'standard-class 'standard-object) => NIL T ;; clisp => NIL T ;; cmucl => T T ;; ecl => T T ;; lispworks なにこの処理系たち… 久しぶりにaclをインストールしたら、 ./alisp dlopen(/tmp/acl62_trial/libacli623t.so, mode) error: /tmp/acl62_trial/libacli623t.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference と言って立ち上がらない…
295 名前:デフォルトの名無しさん mailto:sage [04/03/05 15:28] CVS 鯖のトラブルで遅れれてるけど CMUCL 19a は↓だよ.がんがれ Martin ! (Martin は週末に時間があったらがんがるそうです) CLOS based on Gerd's PCL 2003/06/18 09:23:09 * (subtypep 'standard-class 'standard-object) T T
296 名前:294 mailto:sage [04/03/05 15:47] clisp 2.28 (released 2002-03-03) cmucl CLOS 18e (based on PCL September 16 92 PCL (f)) ecl 0.9c lispworks Version 4.3.6 でした。 そういえば、cmuclはCLOSをだれか(Martinていう人?)が速くなるように書き直し ているという話を聞きました。 clispとか報告したほうがいいのかな…。fixも一緒じゃないとなんとなく気が引ける んだよね。一般的にconformance bugって重箱の隅をつつきだしたら結構あるし。