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
596 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:06:33 ] DrSchemeを触らずに595を書いたけど 見当はずれだったみたい ごめんなさい とりあえず (force (delay (time (tarai 200 100 0)))) したら計算できた syntaxにおけるimplicit forcingがうまく働いてないのかも forceはprocedureだから引数がimplicit forceされてforceしようとした値がpromiseじゃなくなってるとか implicit delayとdelayが違う物みたいだし doc読んでないので見当違いかもしれないけど
597 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:08:30 ] あ、((lambda (x) x) (time (tarai 200 100 0)))でもいいみたい
598 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:11:48 ] >>596 > (force (delay (time (tarai 200 100 0)))) delayいらないんじゃね?
599 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:12:56 ] (time (tarai 200 100 0))が関数に渡されたときはちゃんと200が返るけど マクロを含めsyntaxに渡されたときは#<promise:?>が返る
600 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:14:05 ] >>598 (force (time (tarai 200 100 0)))だとforceに200が渡されてエラー forceは関数だからだと思われる 明示的にdelayしてないとimplicit forceされる
601 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:23:37 ] implicit delayされた物はimplicit forceされる explicit delayされた物はexplicit forceしなくてはいけない implicit delayされた物をexplicit forceすることはできない explicit delayされた物はimplicit forceされない implicit forceされるのは値を受け取る継続が関数の場合のみ timeはsyntaxであるから#<struct:promise>でなく#<promise:?>が返される ってことかな?
602 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:34:26 ] implicit promiseはimplicit forceされると最早implicit promiseでなくなる 他方、explicit promiseはexplicit forceされてもexplicit promiseのまま (define x (call/cc (lambda (return) (delay (return 'value))))) x -> #<struct:promise> (promise? x) -> #t (force x) (promise? x) -> #f x -> 'value こんな感じなのかな
603 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:42:06 ] > (time 1) cpu time: 0 real time: 0 gc time: 0 1 > (time (+ 1 1)) cpu time: 0 real time: 0 gc time: 0 #<struct:promise> だなあ。
604 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:16:33 ] v372@PPCmacだと ようこそ DrScheme, バージョン 372 [3m]. 言語: Lazy Scheme. > (time 1) cpu time: 0 real time: 1 gc time: 0 1 > (time (+ 1 1)) cpu time: 0 real time: 0 gc time: 0 #<promise:?> になりますね とにかく構文に渡されたimplicit promiseはimplicit forceされないので implicit forceされた物を構文に渡さないといけないみたい
605 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:24:37 ] いや違った 構文の値を受け取る継続がトップレベルまたは構文の場合は implicit forceされない…のかも
606 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:14:59 ] 単に値をpromiseで持ち回ってるのではなくて ちゃんと正規評価してると考えた方がいいのかも ifやcond遅延評価処理系では関数的な構文 トップレベルでは評価されない そういった意味では構文はquoteとdefineとset!とlambdaとその派生式のみになる timeやifやcondやandやorは関数的な構文なので評価されない これで辻褄が合うと思う
607 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:18:15 ] typo ifやcond*などの*遅延評価処理系では関数的な構文 つまり(quoteなどの関数では記述できない構文)以外のことね
608 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:19:34 ] (quoteなどの(関数では記述できない構文))以外
609 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:13:46 ] >>603 はv360
610 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:19:12 ] ようこそDrScheme, バージョン 360. 言語: Lazy Scheme. > (fact 10) 3628800 > (time (fact 10)) cpu time: 0 real time: 0 gc time: 0 #<struct:promise> > (force (time (fact 10))) cpu time: 0 real time: 0 gc time: 0 ※ force: expected argument of type <promise>; given 3628800 > (force (delay (time (fact 10)))) cpu time: 0 real time: 0 gc time: 0 ※ force: expected argument of type <promise>; given 3628800 > (+ 0 (time (fact 10))) cpu time: 0 real time: 0 gc time: 0 3628800 だな。このバージョンのトップレベルはなんかおかしいな。
611 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:40:16 ] ・自己評価データは評価される ・変数参照は評価される ・手続き呼出しは評価される ・マクロ使用は展開される ・defineは束縛した変数が参照されるまで評価されない ・quote、begin、lambda、quasiquote、delayは評価される ・構文定義構文は不明 ・これら以外は評価されない ・評価される式から参照される式は評価される という構文周り以外はオーソドックスな実装になってるみたい 末尾再帰がspace leakしないし
612 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:44:28 ] ・これら以外は(トップレベルでは)評価されない、に訂正 トップレベル以外で評価される文脈に於いては構文も評価される
613 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:47:00 ] defineはトップレベルでも評価されるが 束縛された式(正しくない表現だけど意図を察してください(^_^;))は 変数が参照されるまで評価されない、という表現に訂正
614 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:54:10 ] v360とv372は評価されなかった構文の値の表記が異なるだけで 挙動自体は同じみたいですね とにかくifもcondもandもorも正格評価の為に構文とされちゃった物は 関数でラッピングしちゃえばいい (define lazy-if (lambda (pred then-clause else-clause) (if pred then-clause else-clause))) みたいに
615 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:57:50 ] と思ったら > (force (delay (time (fact 10)))) cpu time: 0 real time: 0 gc time: 0 ※ force: expected argument of type <promise>; given 3628800 ここが違いますね v372だと時間が計測されて3628800が返ります
616 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:05:28 ] time構文はトップレベルでも式が自己評価データの場合は評価されるんだ でも式が変数参照だと?じゃないpromiseを返す 単にバグバグなだけかも…
617 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:12:19 ] 自己評価データでなくリテラルの場合だった
618 名前:567 mailto:sage [2008/02/16(土) 18:03:55 ] DrSchemeの話題で盛り上がっているところ申し訳ありません. macro 展開の際に,あらかじめ symbol の束縛関係が参照されると理解しました. この点についてもう少し具体的に質問させてください (>>589 の記述に関係しているのかもしれません). 内部で set! を呼ぶだけの macro Set1 を書いてみました. ;; マクロ定義 (define-syntax Set1 (syntax-rules () ((_ macroSymA macroSymB) (set! macroSymA macroSymB)))) ;; 前準備 (define variable 200) (define newValue 900) variable ;;==> 200 ;; マクロ呼び出し (Set1 variable newValue) ;; 結果 variable ;;==> 900 もしも処理系が macro 適用時に「手続き set! は第1引数として symbol を取る」という事実を知らないで 無条件に macro に渡された引数の束縛関係を解決 (symbol を束縛値に置換) してしまうのであれば, (newValue を束縛値 900 に置換するのと同様に) variable も束縛値 200 に置換してしまってから macro 展開が行われるので,評価対象が (set! 200 900) となってエラーになってしまうはずです. 実際にはそうならないのは,処理系が macro 適用時に (set! macroSymA macroSymB) が特殊な手続き set! の呼び出しであることを認識して, (第2引数の newValue のほうは通常どおり束縛値 900 で置換してよいのだが) 第1引数である variable については束縛値で置換することを敢えて行わず, symbol 「variable」 のまま macro 展開しているからである,と理解してよいでしょうか.
619 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:36:03 ] 束縛関係の解決と評価(この場合は変数参照)は違います。 束縛関係の解決とは C言語風に言えば「変数名がどのアドレスを指すかを確定する事」であり 実際にそのアドレスから値を読み込む事ではありません。 マクロ置換に於いては syntax-rulesの第一引数のリストに列挙されている識別子のみ アドレスも使ったマッチングが行われます。 syntax-rules ()のように識別子が無い場合はアドレスはマッチングに利用されません。 アドレスはマッチング、すなわちどの置換パターンを利用するかを決定するのにのみ利用されるだけです。 そして置換された後の式によって変数が参照されるかどうか決まります。 この場合は置換後の式が(set! variable newValue)なのでvariableは評価されません。 set!の第2引数は評価されるのでnewValueが変数参照されて900となります。 しかし置換後の式が例えば(+ variable newValue)ならば手続き呼出しですので +が変数参照されて#<procedure +>に variableが変数参照されて200に newValueが変数参照されて900に評価されてから 手続きが呼び出されます。
620 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:44:05 ] (A B C)のリストが評価される場合(A B Cは識別子) Aが構文に束縛されているかどうかを調べ ・構文に束縛されている場合 ・primitive構文に束縛されているなら、その評価規則に従って評価します。 ・マクロに束縛されているならパターンマッチを行い、テンプレートに従って置換した後、その式を評価します ・場所に束縛されているなら ・手続き呼出しを行います。AとBとCはすべて評価されますが、順番は決まっていません。 AやBやCが評価されるときに初めて変数参照として値が読み出されます
621 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:52:27 ] マクロ置換された式がリストならまた620の用に評価されます。 primitive構文はdefine、if、quote、lambda、set!のみで 他の構文は全てマクロです。(R5RSの場合。処理系独自のprimitive構文もあり得る。)
622 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:56:49 ] (A B C)という手続き呼出しの場合 AとBとCが評価される順番は決まっていませんが 手続きが呼び出される前には評価されます。 つまりAとBとCが評価された後にAが束縛されていた場所の値を手続きとして呼び出します。 もしAの場所の値が手続きでなければエラーとなります。
623 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:07:03 ] マクロのパターンマッチングは式の形(とリテラル識別子の場合は束縛されている場所)によってのみ行われます なので例えば (define x '(1 2)) (define-syntax foo (syntax-rules () ((foo (x y)) (list y x)) ((foo z) (list z)))) (foo x) -> '((1 2)) となります。 つまり(foo (x y))にではなく(foo z)にマッチした訳です。 (foo x) --(置換)-> (list x) --(部分式の評価)-> (#<procedure list> (1 2)) -> '((1 2)) というわけです。
624 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:35:58 ] リテラル識別子とのマッチングは 正しくはアドレスではなく束縛によって行われますので 構文に束縛されているリテラル識別子は 同じマクロ変換子に束縛されている識別子にマッチします。 構文に束縛されている識別子は 場所には束縛されていませんので アドレスという概念は当てはまりません。 ローカルな変数束縛によって構文束縛が隠蔽される事も ローカルな構文束縛によって変数束縛が隠蔽される事もあります。 なので束縛の種類とその束縛されているモノと字の綴りが同じ識別子のみが リテラル識別子にマッチするという方が正しいでしょう。
625 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:48:28 ] 4s/マクロ変換子/構文/
626 名前:567 mailto:sage [2008/02/16(土) 21:05:57 ] >>619 - >>625 早速のご返答ありがとうございます. いま R5RS も見ながら考えさせていただいていますが,もう少し時間をいただきます. 問題の本質とは少しずれますが,私が混乱していた原因の一つに,syntax-rules の 第1引数である literals に含まれている literal-identifier についての誤解があったようです. 「literal」という名前から,字面の一致だけを見るものだと思いこんでいましたが 正しくは,R5RS や >>573 さんはじめ上の書き込みにもさんざんあるように, literal-identifierは >>583 : >ともに未束縛であるか >或いは同じ束縛(例えばトップレベル変数)を持つ場合にのみマッチする ということなんですね.思いこみで記述が頭に入っていませんでした. なお,577:で 5s/template上のsymbol/pattern上のsymbol/ でした.
627 名前:593 mailto:sage [2008/02/18(月) 00:57:16 ] 皆さん、ありがとうございます。遅くなってすみません。 途中から議論が分からなくなってしまったのですが、>>596 さんのコードを実 行したところ、tarai は実行されますが、表示される時間は 0 です。 > (force (delay (time (tarai 800 400 0)))) cpu time: 0 real time: 0 gc time: 0 800 すみませんが、これはどうにかならないでしょうか?
628 名前:593 mailto:sage [2008/02/18(月) 00:59:59 ] あ、バージョンは最新の 372 です。
629 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:01:00 ] promise作って終りかw
630 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:52:21 ] ちゃんと800が返されてるから 正しいのでは? タライ回し関数は遅延評価で計算すると 正格評価にくらべて格段に速い
631 名前:630 mailto:sage [2008/02/18(月) 11:04:00 ] timeで計測できないくらいの短時間で計算できてるって意味です
632 名前:593 mailto:sage [2008/02/18(月) 13:59:55 ] いや、もっと時間はかかってます。 (force (delay (time (tarai 1000 500 0)))) を実行してみてください。 これで0秒なのは、おかしいでしょう?
633 名前:593 mailto:sage [2008/02/18(月) 14:02:07 ] と言うか、先に0秒という計測結果が表示されてから、10秒ほどして 1000 と いう計算結果が表示されるのです。もしもっと早いマシンをお使いなら、引数 を適宜増やしてお確かめください。
634 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:48:40 ] 確かに time構文はLazy Schemeでは使い物にならないと考えた方がいいかも
635 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:18:20 ] たらいまわしべんちでtime構文が使えないなら、Lazyである意義などない!
636 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:00:56 ] こんなんで我慢してちょ (define (bench exp) __(let* ((start (current-milliseconds)) _________(value exp) _________(end (current-milliseconds))) ____(display start) ____(newline) ____(display value) ____(newline) ____(display end) ____(newline) ____(display (- end start)))) ミリ秒でしか測れないし 余計な出力もあるのがダサいけど
637 名前:593 mailto:sage [2008/02/18(月) 17:06:55 ] >>636 ありがとうございます。ちゃんと動きました。 ありがたいことに、自分にも隅々までよく分かるコードです。 しかし、遅延評価であるがゆえに、逆に副作用だらけになってしまったのが、 少し泣けます。
638 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 00:54:51 ] 正規表現ってRnRSにもSRFIにも入ってないの?
639 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:05:04 ] つ community.schemewiki.org/?scheme-faq-programming#H-1w56qpn
640 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:33:26 ] 実装はいくらでもあるが、標準仕様がないのはなぜかと問いたい 共通語がないと不便じゃないか
641 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:45:47 ] R6RSでUnicode化も決まったので、"Beyond R6RS"に入ってます。 schemers.org/Documents/Standards/Charter/status-jun-2006/status-jun06.html#g11
642 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:19:47 ] 正規表現は構造を文字列で表現するとこがLISPっぽくない。 まあ普及しちゃったからしょうがないけど、必要悪だろ。
643 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:01:38 ] LISPから必要悪を取ったらλしか残らない
644 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:40:04 ] すみません、MzSchemeやGaucheで、実行中のスタックの遷移を表示するにはど うしたらよいでしょうか? www1.ocn.ne.jp/~scheme/petite-start.html ↑のページで紹介されている、ChezSchemeの trace関数のようなものです。
645 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:50:08 ] DrSchemeでプロセス間通信とかできますか? Schemeにはそもそもプロセスという概念が無い? 今はただ関数定義程度の練習レベルです。
646 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 15:51:20 ] つまり、Schemeで出来ること、あるいはSchemeの用途 がイマイチ分かってないということです。
647 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:32:37 ] gccでプロセス間通信とかできますか? Cにはそもそもプロセスという概念が無い? 今はただ関数定義程度の練習レベルです。 つまり、Cで出来ること、あるいはCの用途 がイマイチ分かってないということです。
648 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 18:39:45 ] >>647 そうか。意味不明だったか。確かに。 どういう分野に活かしていくのが普通なんでしょうか? 例えば、CやC++ならネットワークプログラミングとかOSとか デバイスドライバとか作成しますが、Schemeのアプリケーション とはどういったものになりますか?コンパイラ作成用途とかになる んですかね?
649 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:07:12 ] そういうのはライブラリに拠るんだから一概にどうとは言えないよ。 まあ記号処理には強いだろうね。
650 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:11:01 ] >>649 記号処理ですか。未知の分野なのでもう少し精進して 調べて見ます。
651 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:42:31 ] >>644 MzScheme だとライブラリを使えばtrace、untraceもOK。 > (require (lib "trace.ss")) >
652 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:51:09 ] >>645 Petite Chez Scheme だとprocessを使って 他のプロセスにデータを送れたよ。 fprintを使うんだったかな。 >>650 数式処理には向いていると思う。 他にもいろいろと応用はあるんじゃないかな。
653 名前:644 mailto:sage [2008/02/20(水) 21:35:05 ] >>651 MzScheme, DrSchemeでうまく行きました。 ありがとうございました。 Gauche はこんな感じのようです。 ・トレース - 結城浩のSICP日記 - sicp sicp.g.hatena.ne.jp/hyuki/20060507/trace
654 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:41:28 ] >>650 使用言語の選択を誤っていると思う あなたの場合Lispを選択する意味はないのではないか 一般に手に入る資料が豊富な分C/C++でやるのがよい
655 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:44:42 ] >>654 C/C++は習得済みで業務で使用してます。 Schemeでプロダクトコード書くわけではないので。
656 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:58:03 ] lispやってる奴がもれなく超人に見える だからやりたい とか言う程の物さ
657 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:16:40 ] >>655 言語の話とライブラリの話がごっちゃになってないかな。 言語の特徴としては、再帰的な処理の記述とか、 メタなプログラミングが楽とか色々あるけど。 そういうことが知りたいんじゃないんだろうし。 Schemeのアプリケーションって言われても、 ウェブアプリケーションサーバ書いてる人もいれば、 .NET向けのアプリケーションを書くために処理系を実装してたり、 日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。
658 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:22:45 ] >>657 >再帰的な処理の記述とか、 メタなプログラミング ここが勉強したいと思ったきっかけです。 >Schemeのアプリケーションって言われても、 >ウェブアプリケーションサーバ書いてる人もいれば、 >.NET向けのアプリケーションを書くために処理系を実装してたり、 >日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。 色々できるんですね。ありがとうございます。
659 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:30:23 ] >>658 ttp://practical-scheme.net/index-j.html にある文章をいくつか読んでみたらどうだろう。ここのスレの人とかが、 何故敢えてLispやSchemeを使うのか、理解する助けになると思う。
660 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:32:48 ] たぶん、プロセス間通信みたいな処理が好きな人は SchemeよりEmacs Lispの方が楽しめると思う。 CL使わないとLispらしさのかけらもないコードになっちゃうけど。
661 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:52:37 ] >>657 >言語の特徴としては、再帰的な処理の記述とか、 >メタなプログラミングが楽とか色々あるけど。 >そういうことが知りたいんじゃないんだろうし。 とオレも思ったのだが >>658 >>再帰的な処理の記述とか、 メタなプログラミング >ここが勉強したいと思ったきっかけです。 という意外な応答 真意がつかめない
662 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:58:39 ] 便乗質問で恐縮です Larcenyでtraceは使えるんですが、再帰関数をtraceしても 再帰的にtraceしてくれません 何かうまい使い方があるのでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:40:01 ] >>659 読んで見ます。 >>661 C++でテンプレート使ってライブラリ書きたいんですが 再帰とメタファンクションを使わなければいけないんですよ。 で、そもそも再帰とベースとする言語として関数型言語 を覗いたわけです。
664 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 07:29:08 ] >>662 そうなんだよね、traceがちょっと他と違っている。 libにtrace.schがあるんでこれをハックしてみるとか。
665 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:55:30 ] guile + swig でc++のメタ制御してみて便利さを体験してみたら? Gimpのスクリプトで遊んでみるのもいいかも
666 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:52:33 ] gauche本の発売日が1ヶ月伸びてますが、 やっぱりあれだけ赤が入ると無理だったのでしょうか。
667 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 16:23:22 ] Gauche本てどんな読者が対象なんだろう。
668 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:23:12 ] このスレの住人
669 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:24:08 ] まぁ、まんざらでもないよなw
670 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:49:47 ] The Little Schemer読んでる俺も対象に入れてくれお
671 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 18:54:27 ] >>670 ナカーマ 象さん分かりやすいが、文法のリファレンスも欲しい今日この頃。 お勧めありますか?
672 名前:デフォルトの名無しさん [2008/02/21(木) 19:05:40 ] つR5RS 自分はA5用紙に印刷して綴じて常に携帯してる ついでに電子辞書にもtxtファイルで入れてる
673 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:28:28 ] carとcdrは何と読めばいいんでしょうか? カーとクダーでいいですか?
674 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:29:03 ] >>672 thx 日本語訳あったんで落とした。
675 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:29:24 ] >>673 おk
676 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:12:42 ] >>671 ( ^ω^)λ(^ω^ )ナカーマ 漏れはネットのあちこち入門サイトにお世話になってるお
677 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:23:57 ] 再(再(再(再帰)帰)帰)帰
678 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:56:02 ] C/C++で仕事するのが面白くなくて辛いです。 Scheme勉強するのは楽しいです。 仕事の時間は無駄な時間に感じます。
679 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:04:03 ] 仕事というのはそういうものですよ
680 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:17:53 ] 確かに、金をもらわなきゃ誰もやらないようなことだからこそ、 金をもらえるんだものね。 金なしでやる人が大勢いるようなことなら、誰も金を出すわけない。
681 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:25:36 ] 家に帰ってSchemeにポートするつもりで作れYO! ようやって作ったScheme版で独立すれば?という夢ぐらいは持ちたいものだw
682 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:27:08 ] だれかR6RSの日本語訳早く作れよ
683 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:15:56 ] R6RSの解説を読んだら、Schemeの欠陥が色々書いてあった CLは細かいところまでよくできてるっぽいし 見かけによらないものだなーと
684 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:50:01 ] >>677 先頭の再と末尾の帰が!
685 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:52:27 ] >>683 >CLは細かいところまでよくできてるっぽい と思えない俺は異常かおrz
686 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:30 ] (再(再(再(再帰)帰)帰)帰)
687 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:13:33 ] Common Lisp規格まとめ役のスティール親分が、 Schemeみたいにsymbol-valueとsymbol-functionを統合しとけば良かったなあ けど互換性を重視したから難しかったんだよ そう言っておられたぞ。
688 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:35:56 ] Gauche-libsvmのリンク先に飛べない Gauche c-wrapperはswigみたいなもの? なんでswigにしなかったの?
689 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:46:08 ] >>687 へー、初耳だ。 どこで言ってたの?
690 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:35:15 ] >>686 それでよし
691 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:37:24 ] >>687 >symbol-valueとsymbol-function CL最醜の汚点だと思う
692 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:14:06 ] >>689 bitの井田さんのインタビューかな?
693 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:06:12 ] >>691 ちなみに、funcallを書くのは面倒だけど フォームの頭に構文の名前 (funcallやlambdaやifやマクロの名前) を必ず書きましょう と考えると汚くはない funcallが汚いんじゃなくて、funcallを省略できる設計が汚い
694 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:10:21 ] funcallはあまり気にならないな。むしろ判りやすい。 SPECIAL変数付近の扱いはちょっと汚いかなと思う。
695 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:54:19 ] 個人的にはCLで名前空間が単一/一様でないのは気にかかるところだ 関数とその他の値とを区別無くfirst class objectとして扱うコードを 書きたいときに柔軟性を制約する一因とはならないのだろうか?
696 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:58:11 ] >>693 その話は関連する話ではあるけど、 symbolがsymbol-valueとsymbol-functionの二つ持つという話そのものから、 ちょっと離れていっていると思います。 一つしかない場合もその種の議論は成立するのですから。 >>694 スペシャル変数は、スレッドローカルな変数とか、 elispみたいなバッファーローカルな変数と同様の「パターン」で、 ある種のライブラリ、応用にはとても自然なeval拡張だと思う。 別の機構も考えられるけども、とてもLisp的だと思う。 (拡張というのはレキシカルスコープなevalに対して)