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
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行も同意できないのは珍しい。
432 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:04:24 ] Arcは予想通りというか、「Perlがこだわっているもの」を取り込んできた感じ(小飼氏の見方は半分くらい受け付けないけど)。 PaulにとってLispの価値は「美しいこと」より「現実的に強いこと」のほうにあって、 「スケッチ的に手を動かして、試行錯誤で形を作っていける力」「同じことを短く書く力」は 特に大きなウェイトを占めるから、かの言語にある程度近づくのは読めたことだろう。 ただしPerlと違うのは、Lispの構文(あるいは構文の無さ)の範疇でそれをやっているからこそ、 Perlの「しっかり覚えてもなお読みにくいという難しさ」は遠ざけることができているところかな。 「覚えなきゃ手が出せない替わりに、覚えれば物凄い速度で書き下ろせるし、混乱無く読めもする」 という所に着地するために、ArcはLispであることと、LispっぽくないことをPaul流に融合させてると思う。 >>430 は「Lispである部分」を4行目、「Lispっぽくない部分」を1行目でネガティブに捉えているのだと思う。 でも、俺にはどちらも一つのヴィジョンのもとに選択され、良くまとまっているように思える・・・・・・のは多分、 俺がPaulの文章を読んでLispの世界に足を踏み入れた人間で、頭がまだちゃんと独り立ちしてないからかもしれないw
433 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:27:48 ] arcのfnは構造化代入が使える?のね。 srv.arcに (with ((i o ip) (socket-accept s)) 〜) みたいな使われ方があって、withの機能かと思ったら、 with自体はarc.arcに (mac with (parms . body) `((fn ,(map1 car (pair parms)) ,@body) ,@(map1 cadr (pair parms)))) とだけ書いてあった。つまり最初のを展開するとfnにたらい回しされる。 ((fn ((i o ip)) 〜) (socket-accept s)) socket-acceptは多値相当をリストで返すんかな? こういうのは便利のような気もするけど、つい効率の方を気にしてしまう。 名前付き引数ってわけじゃないのか。
434 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 04:18:26 ] ac.scmに追加したら数学関数も動いた。 ;;数学関数追加 (xdef 'sin sin) (xdef 'cos cos) (xdef 'tan tan) (xdef 'asin asin) (xdef 'acos acos) (xdef 'atan atan) arc> (cos 1) 0.5403023058681398 arc> (= pi (acos -1)) 3.141592653589793 arc> pi 3.141592653589793 arc>
435 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 05:16:13 ] 文字列の扱いが楽だね。 arc> (+ "abc" "def") "abcdef" そういうのアリ! arc> ("abc" 2) #\c あ、いいかも。 lambdaが無いのは寂しいけど arc> ((fn (x) (* x x x)) 3) 27 arc> さっぱりして気持ちいいな。 よし、Arc 気に入った。
436 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 06:17:56 ] 文字列を掛けるとどうなるん? 引き算すると??
437 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 06:19:04 ] (* "a" 5) =>"aaaaa" (- "abcde" "bcd") =>"ae" な、わけねーだろ
438 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 14:31:39 ] 型推論によって 整数が期待されている所では (+ "abc" "defgh" "ij") -> 10 文字列が期待されている所では (+ "abc" "defgh" "ij") -> "abcdefghij" リストが期待されている所では (+ "abc" "defgh" "ij") -> ("abc" "defgh" "ij") になるとか?
439 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 14:35:20 ] >>437 俺Lispはかなり初期からそれやってるw
440 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:42:47 ] Arcって文字列とリストを同じような感覚で操作できるみたいだ。 arc> (+ '(a b) '(c d)) (a b c d) arc> (+ '(a b) '(c d)) (a b c d) arc> (+ "ab" "cd") "abcd" arc> (rem 'b '(a b c d)) (a c d) arc> (rem #\b "abcd") "acd" arc> remはremoveかね。
441 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:45:05 ] マッカーシー博士がLispを開発した時の気分しだいではこうだったのかもしれない。 (def test (n) (if (> n 90) 'AA (> n 80) 'A (> n 70) 'B (> n 60) 'C 'D)) シンプルなcond節でifだけで用が足りるからいいかも
442 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:54:15 ] エディタの自動インデント規則もArc用をちゃんと作りたくなるな。 if とか with とか、2個単位でインデントしたくなる。 (if c1 e1 c2 e2)
443 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:37:41 ] なんかキモ系のAAにしか見えねえw
444 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:40:58 ] ラムダ算法とかYコンピネータとかの概念を全く知らない 状態でLittle SchemerとかでSchemeを勉強しても 理解できますか?
445 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:43:17 ] 知らないことを開き直るべきではないけど、 とりあえず「知らなきゃどこにも進めない」ってものではないよ。