[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 15:00 / Filesize : 210 KB / Number-of Response : 784
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part19



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行も同意できないのは珍しい。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<210KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef