1 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:14:56 ] 過去スレ Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/ Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/ Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
331 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:05:11 ] >>327 住井先生の速攻MinCamlコンパイラ概説のAlpha.mlが読めればそれを参考にするといいかも. ttp://min-caml.sourceforge.net/ MinCamlではλ式でなくlet recのところでローカル関数を定義するけどね. 構文木を上から調べていって,変数が導入されていたら グローバルなカウンタか何かを使ってとにかく一意な名前に変えてしまう( x → x1, y → y2 etc. ) そしてハッシュでその対応を覚えておく. ネストした変数束縛で同じ "x" が再び現れたら, そこから下の部分木では対応は x → x1 でなく x → x3 (例えば)であるとハッシュを更新. 例.構文木のうち見終わった部分を [] で書くと... (lambda (x) (lambda (y) (lambda (x) (list x y x)))) → [lambda [x1] (lambda (y) (lambda (x) (list x y x)))] with {x → x1} → [lambda [x1] [lambda [y2] (lambda (x) (list x y x))]] with {x → x1, y → y2} → [lambda [x1] [lambda [y2] [lambda [x3] (list x y x)]]] with {x → x3, y → y2} → [lambda [x1] [lambda [y2] [lambda [x3] [list x3 y2 x3]]]] with {x → x3, y → y2}
332 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:35:10 ] C#の匿名メソッドはクロージャーじゃないっていうけど、何で? クロージャーの補足する環境にオブジェクトの値ではなく参照を含めるだけじゃダメなの? scheme的にはどう?
333 名前:327 mailto:sage [2008/01/28(月) 08:30:39 ] >>331 ありがとう。 やってみるよ。
334 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:26:25 ] >>332 blogs.msdn.com/abhinaba/archive/2005/10/18/482180.aspx
335 名前:306=323 mailto:sage [2008/01/28(月) 17:16:03 ] GaucheをOpenBSDザウルスでビルドできるようになったんだけど 45%程度の確率で*load-path*が破損している 55%: ("../test" "../lib" "../libsrc" "../src" ...) 45%: ("\f" "../lib" "../libsrc" "../src" ...) みたいな感じ -Iで与えられたディレクトリ名のみが破壊されてる 破壊されるパターンはランダムではなく、 いつも決まった文字列にすり替わってる GC_DONT_GC=Yesすると0%になるからGC周りの問題なんだろうけど どこが悪いのか見当もつかない せめて同じ引数で起動したときには同じ状況になってくれればいいのに
336 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:03:08 ] うへえ、追いにくそうなバグだね
337 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:36:35 ] 起動してから20分ぐらいして温まったら安定したりしてなw そのザウルス大丈夫なんだろうな?
338 名前:306 mailto:sage [2008/01/28(月) 23:44:17 ] これまでにわかったのは ・最初のプロンプトが出る前にGCが発動した場合にのみ破壊が起こってること ・プロンプトが出た後のGCによって破壊されることは(今のところ)ないこと ・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数でgoshを起動しても 最初のプロンプトが出る前にGCが発動するのが1000回試行中440回程度あること ・-I引数をいくつも与えると"srfi-6"とか"srfi-2"とか意味のある文字列にすりかわったりする場合があること ・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数で起動した場合 すりかわった後の文字列はいつも同じであること これらの材料でアタリをつけられる人いませんか?
339 名前:306 mailto:sage [2008/01/28(月) 23:58:06 ] 温まったら安定するようになるって可能性より 稼働時間長すぎて不安定になってるって可能性のほうが高いかもw セルフコンパイル&セルフデバッグ&SSH鯖だから
340 名前:306 mailto:sage [2008/01/29(火) 00:05:48 ] あ、そういえばプログラムが暴走したり長時間走ってるプロセスがあると プログラムを起動しようとしてもBad Addressで起動しなかったりするようになる 何度も何度もチャレンジすれば起動するけど i386-OpenBSDならそういうことないんだけど でもそういうハード的な原因ならもっとランダムに破壊されそうなものだけど 破壊される場合は必ず同じパターンに破壊されるからソフト側の問題だと思う Boehm-GCの機種依存部分であるスタックの底とstatic領域の始点を得る関数は 破壊パターン正常パターンともに同じ値を返してます Gauche本体に当てたパッチはDOUBLE_ARMENDIANを未定義にするってのだけだから やはりBoehm-GCに当てたパッチのバグ臭い
341 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:11:53 ] >機種依存部分 CPUのレジスタも?・・・考えるだけでも恐ろしい
342 名前:306 mailto:sage [2008/01/29(火) 01:30:37 ] static領域の終点も同じ値を返すから どうもレジスタの指す領域のマーク漏れ臭い でもi386-OpenBSDでは問題ないし Linuxザウルスではうまくいってる(らしい)から もうBoehm-GC側では怪しいところはないんだけどなぁ
343 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:46:25 ] α変換とβ変換を考え直した。 ;;λ計算インタープリタ ver0.3 (define (subst old new f) (cond ((null? f) '()) ((equal? (car f) old) (cons new (subst old new (cdr f)))) ((atom? (car f)) (cons (car f) (subst old new (cdr f)))) (else (cons (subst old new (car f))(subst old new (cdr f)))))) (define (atom? f) (and (not (pair? f)))) ;;λ式の判定 定義2.1.1(計算論) (define (lambda-term? f) (cond ((symbol? f) #t) ;x0,x1... ((number? f) #t) ;1,2,3..数もλ式ということにする。 ((null? (cdr f)) #f) ;(M) ((and (eq? (car f) 'lambda)(symbol? (caadr f))(lambda-term? (caddr f))) #t);λx.M ((and (lambda-term? (car f))(lambda-term? (cadr f)))) ;(M N) (else #f)))
344 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:47:41 ] ;;α変換 λ式の定義にしたがってパース。 (define (alfa-conversion f) (genvar 'reset) (reset-var) (alfa-conversion1 f)) (define (alfa-conversion1 f) (cond ((and (symbol? f)(bound? f)) (bound? f)) ((and (symbol? f)(not(bound? f)) f)) ((number? f) f) ((null? (cdr f)) (alfa-conversion1 (car f))) ((and (eq? (car f) 'lambda)(symbol? (caadr f))) (let ((new (genvar 'gen)) (l '())) (bound (caadr f) new) (set! l (list 'lambda (list new) (alfa-conversion1 (caddr f)))) (reset-var) l)) (else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f)))))) ;;変数リスト ;;((x . x1)(y . x2) ...) (define var-assoc '()) (define (bound? v) (let ((ans (assq v var-assoc))) (if ans (cdr ans) #f)))
345 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:49:06 ] (define (bound old new) (set! var-assoc (cons (cons old new) var-assoc))) (define (reset-var) (set! var-assoc '())) ;; 変数を生成する (define genvar (let ((x -1)) (lambda (msg) (cond ((eq? msg 'gen) (begin (set! x (+ x 1)) (string->symbol (string-append "x" (number->string x))))) ((eq? msg 'reset)(set! x -1)))))) ;;β基の判定 (λx.M)N 計算論p66 (define (beta-redex? f) (cond ((atom? f) #f) ((atom? (car f)) #f) ((and (eq? (caar f) 'lambda) (symbol? (caadar f)) (lambda-term? (caddar f)) (lambda-term? (cadr f))) #t) (else #f)))
346 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:49:59 ] ;;β正規形 β-normal-form (define (beta-normal-form? f) (cond ((and (lambda-term? f)(symbol? f)) #t) ; x0 ((and (lambda-term? f)(beta-redex? (cadr f))) #f) ;(x λx.M) ((and (lambda-term? f)(not (beta-redex? f))) #t) (else #f))) ;;β変換 (define (beta-reduce l m) (let ((arg (caadr l)) (body (cddr l))) (subst arg m body))) ;; ((N M)) -> (N M) ;; (x0) -> x0 ;; (N) -> N (define (simpl f) (cond ((lambda-term? f) f) ((and (lambda-term? (car f))(null? (cdr f))) (car f)) ((and (lambda-term? (caar f))(lambda-term? (cadar f))) (car f)) (else f))) (define (reduce form) (reduce1 (alfa-conversion form)))
347 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:51:56 ] (define (reduce1 form) (cond ((beta-normal-form? form) form) ((beta-redex? form) (begin (display form)(newline) (reduce1 (simpl (beta-reduce (car form) (cadr form)))))) ((beta-redex? (cadr form)) (begin (display form)(newline) (reduce1 (list (car form) (simpl (beta-reduce (car (cadr form)) (cadr (cadr form)))))))))) > uoo ((lambda (x) (lambda (y) x)) y) > (reduce uoo) ((lambda (x0) (lambda (x1) x0)) y) (lambda (x1) y) > 長々とスマンです。
348 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:10:53 ] GaucheのGCは保守GCだっけ? しかもARM?バグバグの予感
349 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:15:28 ] λの本体はやっぱりカッコでくくらないといけなかった。 > bar ((lambda (y) (y ((lambda (z) (x z)) (lambda (z) z)))) (lambda (a) a)) > (reduce bar) ((lambda (x0) (x0 ((lambda (x1) (x x1)) (lambda (x2) x2)))) (lambda (x3) x3)) ((lambda (x3) x3) ((lambda (x1) (x x1)) (lambda (x2) x2))) ((lambda (x1) (x x1)) (lambda (x2) x2)) (x (lambda (x2) x2)) >
350 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:58:28 ] >>342 BoehmってXScaleできちんとした実績あるのかなあ
351 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 15:24:15 ] >>349 余分な括弧を許してsimplを使うのがまわりくどい。 括弧の代わりにXMLみたいなタグをイメージしてみたら? タグは<variable><application><abstraction>の3種類とする。 余分なタグをつけると意味が変わってしまうから、 余分なタグのない状態を保つことになり、simplなんていらなくなる。 それ以前にβ正規形の定義がおかしい。 β基は一番上とcadr以外の場所にもあるから全部探さないと
352 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:17:23 ] >>351 >β基は一番上とcadr以外の場所にもあるから全部探さないと 具体的にどういう場合なのか教えてくれないか。考えてみたいんで。
353 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:59:52 ] >>352 バックトラッキングみたいなことかな?
354 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:01:44 ] λx.λy.x((λz.z)y)とかかな?
355 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:05:57 ] >>352 最外簡約とかでググって。 >>307 の本にも詳しく解説してある。
356 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:07:15 ] 正規形もいれた方がいいかな。
357 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:39:46 ] >>351 言わんとすることがなんとなくわかってきた。 朝、早起きできたら書き直してみるよ。
358 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:06:50 ] インデックス・オートマトン
359 名前:306 mailto:sage [2008/01/30(水) 06:37:02 ] 原因の一端が突き止められました グローバル変数pre_cmdsがDATASTARTとDATAENDの間に位置してないから スキャンの対象外になってたせいのようです DATASTARTとDATAENDを正しく取得できるようにすればいいようです
360 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:25:09 ] Arc arclanguage.org/ リリースされたぞ!
361 名前:306 mailto:sage [2008/01/30(水) 07:26:45 ] Boehm-GCは.bssセクションの末尾からメモリを走査していって 最初にsegvったところ(の1ワード手前)が.rodataセクションの開始点だと仮定してるようですが arm-OpenBSDはセクションの間ごとにsegvるので .bssセクションのみをスキャン対象にしてしまうようです OpenBSD4.2のportsのパッチはそこらへんを工夫してうまくやってるようです
362 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:42:51 ] おつかれ〜
363 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 09:46:18 ] >>306 さんは凄いなぁ。
364 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:09:53 ] >>360 よくわからんがすばらしい!
365 名前:306 mailto:sage [2008/01/30(水) 20:50:26 ] C言語の範疇ではrodataセクションに ヒープへのポインタは入り得ないので dataセクションとbssセクションをスキャンするようにパッチを当て test/system.scmのcond-expandのsigwait節にelse節を追加したら(pthreadを無効にしているため) すべてのtestにpassしました shiroさんのとこに報告しようと思います C++とかだとコンストラクタの関係で rodataセクションにもヒープへのポインタが入り得るのかな?
366 名前:デフォルトの名無しさん mailto:age [2008/01/30(水) 21:41:49 ] >>306 Arcに期待してもいのかなあ?(期待したいのだけど) 「MzScheme上で動く」って言われても、 それを望んでいたのかなあ? ソースも何も読んでないけど(「なら何も言うな!」はご勘弁を) Paul Graham の名前で出てくるのだから 単にLISP処理系の一つではなく 「LISPもSchemeもまとめて、S式はArcに集まれ!」 ぐらいものを期待していたんだけど。 Arcをよく知ってる人! 解説よろしく!
367 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:46:26 ] いまいち何が新しいのかよくわからんのよね>Arc
368 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:02:50 ] ifとか劣化したcondにしか見えない。 alrefは=(≒setf)のためだと思うが、 値を返してしまうので、成否がわからない。 この問題は多値/optional型がFAだと思うのだが…
369 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:06:22 ] Schemeでも今では大きい、もっと削ってシンプルに、という方向なのかな。 その割には(とりあえず)Schemeで実装されてるとこが本末転倒だけど。
370 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:13:41 ] シンプルに、っていうか とにかく記述のコンパクトさにこだわってる感じ スクリプト言語的な志向性というか
371 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:15:36 ] tut.txt読んだだけだと 「括弧が少なくて読みづらい」「識別子が短くて読みづらい」 だな それとなぜかlogoが連想された
372 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:20:26 ] 彼ほどの人物でも「俺様Lisp」の誘惑から逃れることは出来なかったってことか。 あくまで、今のところは、だけど。今後の大化けに期待。
373 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:29:42 ] もしかしたらSchemeにおける第1級の継続みたいな 画期的な武器があるのかも
374 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:31:50 ] >>351 余計なカッコがつくのはbeta-reduceで余計なカッコがついてしまうのが原因だった。 ;;β変換 (define (beta-reduce l m) (let ((arg (caadr l)) (body (cddr l))) ;x0 -> (x0), (x y) -> ((x y)) (car (subst arg m body)))) ;(x-) -> x0,((x y)) -> (x y) α変換の付け替えが違っていた。 (define (alfa-conversion1 f) (cond ((and (symbol? f)(bound? f)) (bound? f)) ((and (symbol? f)(not(bound? f)) f)) ((number? f) f) ((null? (cdr f)) (alfa-conversion1 (car f))) ((and (eq? (car f) 'lambda)(symbol? (caadr f))) (let ((new (genvar 'gen))) (bound (caadr f) new) (list 'lambda (list new) (alfa-conversion1 (caddr f))))) (else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f))))))
375 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:34:32 ] β正規形、とりあえず書き直してみたがアヤシイ。 ;;β正規形 β-normal-form (define (beta-normal-form? f) (cond ((not (lambda-term? f)) #f) ((symbol? f) #t) ; x0,x1... ((number? f) #t) ; 1,2,3... ((and (list? f)(eq? (car f) 'lambda) (beta-normal-form? (caddr f))) #t) ;λx.x ((and (list? f) (symbol? (car f)) (beta-normal-form? (cadr f))) #t) ;(x λx.x) ((and (list? f)(symbol? (car f))(symbol? (cadr f))) #f) ;(x0 x1) (else #f)))
376 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:35:20 ] 結局ベターなLisp方言ってだけなの?>arc 速度的にあまり期待できないなぁ。 せめてCommonLispで実装してほしかったよ。
377 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:36:53 ] リダクション、書き直してみたけど、左側のネストが深くなるとアウト。 (define (reduce1 form) (cond ((beta-normal-form? form) form) ;β-normal-form ((and (symbol? (car form)) (beta-redex? (cadr form))) ;(x0 M) (begin (display form)(newline) (reduce1 (list (car form) (reduce1 (cadr form)))))) ((eq? (car form) 'lambda) ;λx.M (begin (display form)(newline) (reduce1 (list (car form) (cadr form) (reduce1 (caddr form)))))) ((eq? (caar form) 'lambda) (begin (display form)(newline) (reduce1 (beta-reduce (car form) (cadr form))))) ;(λx.x)M (else (error "Reduction error"))))
378 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:23:15 ] >>351 ヒントください。 α変換。(lambda (x) (lambda (y) (x ((lambda (z) z) y))))だとうまくいくけど そうすると((lambda (x) (lambda (y) x)) y)がうまくいかない。 λx.λy.λz のように深くなっていくときには一番内側のλ式から変換していくと 思うのだけどxyzを順番に変換していくのがよくわからない。
379 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:26:35 ] >>378 pc11.2ch.net/test/read.cgi/tech/1193743693/485 イータ簡約って奴でしょ。 www.lambda-bound.com/book/lambdacalc/node21.html
380 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:24:32 ] > Arc よく見てないけど、グレアムのことだからマクロは使えるんだろうな。
381 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 02:50:21 ] Arcって車輪の再発明じゃないの。ただのSchemeもどきでしょ。 何か新しいことあるの?
382 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:56:09 ] >>381 知らなきゃ書けない1行目のあとに 知らない奴しか書かない2行目が続くのはどうかと。
383 名前:378 mailto:sage [2008/01/31(木) 07:20:54 ] α変換については束縛変数のリストをスタックに積めばいいだけだった。 (define (alfa-conversion1 f) (cond ((and (symbol? f)(bound? f)) (bound? f)) ((and (symbol? f)(not(bound? f)) f)) ((number? f) f) ((null? (cdr f)) (alfa-conversion1 (car f))) ((and (eq? (car f) 'lambda)(symbol? (caadr f))) (let ((new (genvar 'gen)) (l '())) (push-var) (bound (caadr f) new) (set! l (list 'lambda (list new) (alfa-conversion1 (caddr f)))) (pop-var) l)) (else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f)))))) (define (push-var) (set! stack (cons var-assoc stack))) (define (pop-var) (set! var-assoc (car stack)) (set! stack (cdr stack)))
384 名前:378 mailto:sage [2008/01/31(木) 07:24:23 ] 多重抽象についてはβ変換を複数の項を扱えるように変更して最左戦略 すればいいみたいなので拡張する。 ((lambda (x) (lambda (y) (x y))) a b) ((lambda (x y) (x y)) a b)
385 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 10:03:30 ] 計算論 計算可能性とラムダ計算 ttp://www.amazon.co.jp/dp/4764901846/ この本を読んでおくとschemeに対する理解は 深まりますか?
386 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:50:23 ] >>385 理解が深まると思うよ。 Guy L. Steele, Jr.はScheme開発の初期にチャーチの論文を 読んでたらしいから。Lispはλから離れてしまったけど Schemeはλに近いと思う。
387 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:55:58 ] >>386 ありがとう。ページ数も少ないし読みやすそうなので 読んで見ます。
388 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 12:15:01 ] 正直、そういう質問が出るくらいだからまだ他に読む本があるはず。 プログラミング言語の新潮流 www.amazon.co.jp/dp/4320023773/ コンピュータサイエンス入門−論理とプログラム意味論 www.amazon.co.jp/dp/4000061909/ guppy.eng.kagawa-u.ac.jp/2005/AdvProg/ 「ラムダ計算 プログラミング言語の数学モデル」 www.kurims.kyoto-u.ac.jp/~cs/csnyumon/appendix_A.pdf >>387 > ページ数も少ないし読みやすそうなので あれは純然たる数学の本の体裁だから、 プログラミング言語入門的な本に比べると、 十万ページくらいある感じですよ。 あのシリーズは余分な解説はほとんどなくて骨子のみだし。
389 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 12:38:46 ] >>388 >十万ページくらいある感じですよ。 そうだね。 故中西先生のLispの本も同じシリーズだったと思う。 とっつきは悪いけど時間が経てば理解が深まり名著だって 思うようになるんじゃないかな。最初に中西先生のLisp本 読んだときはさっぱりわからなかったもんなぁ。
390 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 12:42:49 ] >>388 >>389 そうですか。 もう少しscheme勉強してから読むことにします。 でも絶版になったら嫌なんで買っておきます。
391 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 12:53:47 ] 証明の中でβ変換を並行処理してハァハァする本、という印象があるのだが Schemeは並行計算や遅延評価に強いわけでもないだろうに Haskellが「遠い」ように見えるのは型があってマクロがないのが原因だな
392 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:04:05 ] 高橋さんの本を読んでSchemeに対する理解が深まるってのは詐欺に近いと思う。
393 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:30:37 ] journal.mycom.co.jp/news/2008/01/30/022/index.html
394 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:12:29 ] >>393 このスクリーンショットは... journal.mycom.co.jp/photo/news/2008/01/30/022/images/001l.jpg
395 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:28:26 ] begin ってw Pascal みたいやな
396 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:38:29 ] pascalていうより、そのまんまschemeでわ。
397 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:22:39 ] (prn "Hello, World!")
398 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:41:32 ] MzSchemeとどこがちがうんだ?
399 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:50:41 ] >>394 なにを思ってこの画面を載せたんだろーか
400 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:54:43 ] いやそもそも^Cでuser breakかけた後はMzSchemeでそ
401 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:07:11 ] >>394 arc関係なさすぎw
402 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:04:08 ] ほんとに「人気の言語を作るには」がそのまんま形になった感じなんだね > Arc
403 名前:真人間になれ、忍 mailto:sage [2008/02/01(金) 00:10:43 ] さらしとくw 04:07 PM shinobu@MBPro ~/Downloads/arc0 $ mzscheme -m -f as.scm Use (quit) to quit, (tl) to return here after an interrupt. arc> ^Cuser break === context === /Users/shinobu/Downloads/arc0/ac.scm:904:4 /Users/shinobu/Downloads/arc0/ac.scm:979:7 > (begin (display "Hello, World!") (newline)) Hello, World! > ワラ
404 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:23:13 ] shinobu の OS X ハッキング! にはお世話になっている俺がいる。
405 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:43:11 ] arcつかえねーよっていう高度なdisだなw
406 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:01:55 ] 使い方わからずに試行錯誤を繰り返して、^Cしてようやく使えた気になってるのかな? とりあえず魚拓 s04.megalodon.jp/2008-0201-0059-28/journal.mycom.co.jp/news/2008/01/30/022/index.html s03.megalodon.jp/2008-0201-0100-52/journal.mycom.co.jp/photo/news/2008/01/30/022/images/001l.jpg
407 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:04:53 ] なんかnewlispみたいw
408 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 07:40:31 ] Arc、あんまり飛躍がなくてずいぶん大人しいなあ。ちょっと期待外れ。
409 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 08:37:01 ] オブジェクトなマクロって何に使うの?>arc
410 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:00:14 ] 構文がファーストクラスってことかな? なら((fn (x) (x T 'foo 'bar)) if)みたいなことができたり (apply if '(NIL foo bar))みたいなことができるのかな? CLみたくマクロと特別式に分かれてるのかな? Schemeみたく構文として(プリミティブと合成の違いはあるけど)一緒くたなのかな?
411 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:01:40 ] ラムダ式になっているだけに見えるが、 macro-expandとかしなくてもapply出来るわな、動的に。
412 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 12:09:06 ] arc> (let for (fn () (pr "blub ")) (repeat 3 (for))) Error: "#<procedure>: expects at least 3 arguments, given 0" こういう時に匿名マクロが欲しい
413 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 17:32:32 ] arc> (fn (for) (for)) Error: "#<procedure>: expects at least 3 arguments, given 0" 何か変だと思ったら束縛するより先にマクロ展開してる マクロと同じ名前の局所変数がマクロを隠すことがない 逆にマクロが変数を隠す問題はfuncallに相当するものを使って回避できる (リストの先頭に来なければマクロに間違われることもないから)
414 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:56:42 ] ttp://blog.livedoor.jp/dankogai/archives/50994188.html
415 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 06:13:13 ] >>385 その本もってるが、定理と証明ばっかりでさっぱり判らん。 1章はともかく、2章辺りから終始論理式と、「〜を仮定すると 〜を満たす〜があるとき〜は〜の〜という」みたいな口調で うんざりした。だから何、と。書き方が数学屋さん向け。 時代的に無理だろうけど「はじめに」でLISPの基礎理論だ とか言うなら、それで書いてくれた方が良い。 プログラマの心理は、手段みたいなものは最初どうでもよくて、 結果や効果からの興味で中身がどうなってるか、と関心が 向いてくと思うんだけど、そういうのを期待できる本じゃない。
416 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 09:19:47 ] Lispの本質はマクロです SICP読んだだけの人にはわからんのです
417 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:46:00 ] >>413 schemeのスコープで評価してないだけじゃないかと。 schemeだと ((lambda (list) (list)) (lambda () 'うんこ)) =>うんこ ちゃんとうんこが出てきます。
418 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:31:12 ] ttp://d3.jpn.org/blog/2008/02/arc_source_review_1.html
419 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:16:18 ] 未完成の俺様Lispでポールが爆釣
420 名前:ポール@アークヒルズ mailto:sage [2008/02/02(土) 17:24:44 ] 沢山釣れた(@wぷ
421 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 18:05:26 ] アークヒルズってどのポールだよ?
422 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:38:25 ] arc いいんじゃない。なんか、こう、こざっぱりした感じで。 へ〜、イイ感じじゃん。
423 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:43:34 ] >>417 これで便秘解消ですね!
424 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:46:12 ] 平方根があるのに三角関数がない?複素数はいいみたい。 arc> (sqrt 2) 1.4142135623730951 arc> (sin 3.14) Error: "reference to undefined identifier: _sin" arc> (acos -1) Error: "reference to undefined identifier: _acos" arc> arc> (* 1+1i 1+1i) 0+2i arc>
425 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:09:55 ] 高階関数はSchemeと同じみたい。ファーストクラス、λと同じ。 (def sum (f n) (if (is n 0) 0 (+ (f n) (sum f (- n 1))))) arc> (sum sqrt 10) 22.4682781862041 arc>
426 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:38:53 ] スピードを比較するのは酷かもしれんけど... arc> (def tak (x y z) (if (> x y) (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)) y)) #<procedure: tak> arc> (tak 12 6 0) 12 arc> time #3(tagged mac #<procedure>) arc> (time (tak 12 6 0)) time: 18047 msec. 12 arc> Schemeで書かれていることを考えれば悪くはない。
427 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:51:27 ] CommonLisp = ベンツ Scheme = ポルシェ Arc = アルファロメオ
428 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:10:43 ] なんだすぐ錆びるのか Arc
429 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:19:26 ] また遅れるみたいですね... orz xach.livejournal.com/156584.html
430 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 00:56:48 ] きっと初心者がarcやったら混乱する ポールは結局、前置記法に嫌気が差しただけに見える pythonやMLみたいなのを設計した方が受けが良いと思う 頭に括弧がある限り、ただのLISP方言だよ
431 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 01:25:45 ] 煽りでも荒らしでも喧嘩腰でもないレスに1行も同意できないのは珍しい。