1 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:58:40 ] □過去スレ□ Part21: ttp://pc11.2ch.net/test/read.html/tech/1207300697/ Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/ Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/ 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
752 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:38:42 ] 大きなletrecの下で
753 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:40:49 ] exeなんて飾りです。エロい人にはそれがわからんのですよ。 mingwとmsysをまずインストールしましょう。 そしてchickenのwindows用binaryをCドライブ直下に解凍しましょう。 msys.batを起動しましょう。 export PATH=/c/chicken/bin:$PATHと打ち込んでPATHを設定しましょう。 作られる実行ファイルはlibchicken.dll等に依存するのでPATHを設定しないと起動しません。 vi foo.scmと打ち込んでSchemeソースを作成しましょう。 csc foo.scmと打ち込んでコンパイルしましょう。 ./foo.exeと打ち込んで実行しましょう。 ttp://www.mingw.org/ ttp://nchc.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe ttp://nchc.dl.sourceforge.net/sourceforge/mingw/MSYS-1.0.10.exe
754 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:43:26 ] >>739 > 原始構文という言葉はプリミティブ式のうち構文であるものを指すつもりで使いました。 かなり細部に渡る話をしているので、言葉は厳密に使った方がいいと思います。 特に今ではR6RSがあるので、何を指していっているのか分からなくなります。 R6RSには"primitive syntax"(9)というのがあって、 > Schemeのプリミティヴ構文はif、quote、lambda、define、set!であり、 とは違うものです。R5RSには"primitive syntax"という用語は出てきません。 またこれら(if, quote, ...)を使ったformは、R6RSの"primitive syntax"(9)の一部である primitive expression types(9.1)にも含まれません。 R5RSでは含まれていた(4.1)のですけれど。
755 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:14:41 ] (原始式のうち構文キーワードで始まるリスト)と定義、ならよろしいか?
756 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:33:57 ] 追加:R5RSにおける
757 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:34:34 ] R5RSでは内部表現を「リスト」と限定していません。 また意味論もリスト上で定義されていません。
758 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:37:42 ] そういう根源的なところで Scheme って本質的に Lisp ではないんだよな (茶々すまん)
759 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:45:19 ] 少なくとも形式的構文上はリストとして定義されてませんか?(R5RS 7.1) 意味論上はともかく。
760 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:51:32 ] 解釈改憲より新しく書き直したほうが建設的だと思うけどな 実装を書き直す人は腐るほどいるが
761 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 14:02:24 ] >>759 仕様もR6RSでやったところ。
762 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 14:02:46 ] 間違えた>>760 へのレス
763 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:11:45 ] >>759 (f a b)が(f . (a b))と同じとは文法には書いてない。 印字表現が似ているだけなのでは? そもそも「構文上リストとして定義」とはどういう意味なのでしょうか?
764 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:21:32 ] <lambda expression> --> (lambda <formals> <body>) <quotation> --> '<datum> | (quote <datum>) <assignment> --> (set! <variable> <expression>) <conditional> --> (if <test> <consequent> <alternate>) <definition> --> (define <variable> <expression>) | (define (<variable> <def formals>) <body>) | (begin <definition>*)
765 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:23:38 ] ただし意味論上の<list>と同一ではない
766 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:36:42 ] >>741 んなことない。トップレベルでの継続がどこまでの範囲を補足するかの 規定がR5RSには無いんだから、どっちの解釈もあり。 Gauche系の解釈でもトップレベルbeginをletに展開しているわけじゃない (letに展開したらdefineがうまくいかない)。 コンパイルと実行の単位の問題で、継続の捕捉範囲が変わってるだけ。
767 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:59:38 ] 生存期間が書かれてなければ、無限生存期間なのではないでしょうか。 コンスセルがそうであるように。
768 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:15:07 ] >>764 これは「構文上リストとして定義」ではないです。 これが「構文上リストとして定義」なら、 他の言語に良くある<式> --> ( <式> ) までそうなってしまいます。 そもそも「構文上リストとして定義」という概念はないと思います。 リストには、シグネチャや意味が付いてまわりますから。
769 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:18:32 ] >>723 > ;A > (display (call/cc (lambda (c) (set! cc c) (cc 'hoge)))) > (display 'fuga) > (cc 'moga) (call/cc (lambda (c) (set! cc c) (cc 'hoge))) (display 'fuga) (cc 'moga) だとどうでしょう?
770 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:28:28 ] <list> --> (<datum>*) | (<datum>+ . <datum>) | <abbreviation> <datum> --> <simple datum> | <compound datum> <simple datum> --> <boolean> | <number> | <character> | <string> | <symbol> <symbol> --> <identifier> <identifier> --> <initial> <subsequent>* | <peculiar identifier> <initial> --> <letter> | <special initial> <letter> --> a | b | c | ... | z <special initial> --> ! | $ | % | & | * | / | : | < | = | > | ? | ^ | _ | ~ <subsequent> --> <initial> | <digit> | <special subsequent> <digit> --> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <special subsequent> --> + | - | . | @ <peculiar identifier> --> + | - | ... と辿れば一応リスト。(構文キーワードも識別子だから) 他の言語に良くある<式> --> ( <式> ) はSchemeには存在しない。 うーん、苦しいw
771 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:39:07 ] aclって今でもアホみたいに高いの? USでは$599 (アカデミックユーザ)からとはかかれてたが。
772 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:06:43 ] レス遅くてサーセン >>753 指定されたパスが見つかりません。(←MSYS.bat上だと文字化けしてる *** Shell command terminated with exit status 1: /chicken/bin/chicken test.scm -output-file test.c -quiet って言われてしまうお… やった OS WinVista Ultimate MinGW 5.1.4は元から入れてあった MSYS 1.0.10インスコ(インスコ途中にMinGWの場所指定しろって言われたからした PATHをchicken/binな場所に通した msys.bat実行した csc test.scm とかしてみたら上記エラー /(MSYSインスコ場所直下)にchickenフォルダ移してみたりとかもやってみたけどダメだったぜ… よくわかんねーけど ttp://alohakun.blog7.fc2.com/blog-entry-912.html とかみるとoファイルが吐かれるらしいけど、何もファイル吐かれてない… .cも吐かれてない ボスケテ
773 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:06:26 ] >>772 パス指定がどっかで決め打ちになってる予感。
774 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 23:23:54 ] >>772 c:\chicken\bin>csc -dynamic test.scm ってやってみるとgccがないって怒られるけど、.cファイルは作られる。 おそらくオプション指定の問題。
775 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:18:40 ] csiは起動しますか?
776 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:20:48 ] 自分の環境でビルドすると.scmから.exeファイルが作られるだけで.cも.oも残りませんね
777 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:25:43 ] 結局gccが必要なのか。
778 名前:デフォルトの名無しさん [2008/06/21(土) 00:31:58 ] どうもいろいろ試してみた所772のエラーメッセージは chickenディレクトリがc:\にない場合に出る模様。 c:\chickenになってますか?
779 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:50:28 ] >>774 コマンドプロンプトからそれやってみると同じエラーが出る罠 >>775 今やってみたらコマンドプロンプトだと出来るけどMSYSでやってみたら起動しなかった エラーもなんも表示されない不思議な状態になった もちろん何か入力してもなんもなし >>778 d:\Scheme\chicken\binに置いていてお PATHの設定でそっち指定してたけど chickenをC直下において >>753 の通りにパス設定したらエラーが変わったお 'gcc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 *** Shell command terminated with exit status 1: gcc test.c -o test.o -c -fno-strict-aliasing -DHAVE_CHICKEN_CONFIG_H -Os -I /chicken/include で、とりあえずcファイルはできた で、エラーに従って export PATH=/c/MinGW/bin:$PATH とかしてみたら Info: resolvingうんたら〜ってメッセージが5個くらい出たけどtest.exeが出来ました! ついでにobjdump -p test.exeしてみたら DLL Name: libchicken.dll DLL Name: KERNEL32.dll DLL Name: msvcrt.dll だってさ MinGW周りのDLLはいらないっぽいのが不思議だ… というわけでした!みんなありがと!愛してるぜ!
780 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 15:25:18 ] >>779 MinGWって、C++のスレッド関係で独自ランタイム必要とするだけで、 CならMSのCランタイムだけで大丈夫じゃなかったっけ?
781 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:05:58 ] >>200 番台でやってた継続の例をwikipediaでみつけた。 en.wikipedia.org/wiki/Call-with-current-continuation >>268-271 と似てる〜
782 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 02:46:40 ] >>767 は >>766 へのレス? 生存期間の話じゃないよ。継続の「底」をどこに取るかって話。 R5RSのトップレベルの実行はREPLの実行と区別されていない。全ての トップレベルフォームが見えてる状態で一気に実行するところを 継続の起点と見るか、REPLにおいてトップレベルフォームひとつひとつ を実行するところを継続の起点と見るか、って違い。 R6RSではREPLそのものが無くなって、トップレベルの意味は明確化された。
783 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 09:31:57 ] REPLって何?
784 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 09:39:13 ] Random Electrical Pulse Light
785 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 10:04:02 ] reed eeval print lup
786 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 10:08:03 ] 呪文:よんでひょうかしていんさつしてくりかえす
787 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 11:12:56 ] ググれ
788 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 12:45:05 ] 話は変わるけど、Gaucheboxに入ってるGaucheってmingwバイナリパッケージのより新しい? pegとかも入ってるんだけど…。
789 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:26:09 ] ; >>783 ;The Read-Eval-Print Loop (define (driver-loop) (begin (let ((input (read))) ; read (let ((output (eval input))) ; eval (display output))) ; print (driver-loop))) ; loop
790 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:45:57 ] >>788 practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aGauchebox#H-1vw6gwn 基本的にGaucheのCVS HEAD(今はSubversion trunk)をビルドするので、 その時点の最新版が入る。リリース版の0.8.13より新しい。
791 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 15:51:15 ] (define (eval x) x) (define (driver-loop) (begin (let ((input (read))) (let ((output (eval input))) (display output)(newline))) (driver-loop))) (driver-loop)
792 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 16:23:43 ] >>791 Lispではよくあることだが、式と値を混同しているね
793 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 21:53:32 ] >>792 それではevalのお手本をどうぞ。
794 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:01:24 ] >>791 > (define (eval x) > x) これマジレスなのw
795 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:08:34 ] S式を 評価するのに 値呼び
796 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:14:49 ] 評価頼られてるのに、自分はとんずらして、他に丸投げかよ。
797 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:25:15 ] あと、継続渡しと称して (lambda (x) x) を渡すこともあるね
798 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:49:16 ] 普通にこれで動く。 (define (driver-loop) (begin (let ((input (read))) (let ((output (eval input))) (display output)(newline))) (driver-loop))) (driver-loop) でもevalのお手本、観てみたいな。
799 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:51:28 ] ∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
800 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:59:06 ] 批判してる奴ってなんでそんなにエバルんだろう?
801 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:04:05 ] >>797 それ (define (eval x) (lambda (x) x)) という意味? (+ 2 2) => #<procedure> になると思うよ。ちょっとマズイ気がする。
802 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:32:42 ] 修辞疑問のお手本ですか
803 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:01:45 ] Lisp Scheme FAQ 「修辞疑問文」 要点を強調するために発せられる修辞疑問文では、答は期待されていない。 多くの場合、答は疑問文自体に含まれるか明白だからである。 前提的疑問文は、答えうるものが何であれ、その人が断定しようと望んでいること以上の情報を含んでしまうだろうから、 ジョークとして用いられたり、相手を困らせるために用いられたりする場合がある。 例) 批判してる奴ってなんでそんなにエバルんだろう? 修辞疑問のお手本ですか
804 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:03:20 ] なるほど「修辞疑問のお手本ですか」は修辞疑問文の再帰的な定義になっているわけだ。w
805 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 06:53:39 ] つ「修辞疑問って答えを期待してないんじゃないんですか?」
806 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 06:57:39 ] >>803 この例の会話ヘンだよ。 >例) >批判してる奴ってなんでそんなにエバルんだろう? <=答えを期待してない >修辞疑問のお手本ですか <=なぜか答えてるw
807 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:54:34 ] 期待してないものが思いがけず手に入ることだってあるんですよ
808 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 15:39:59 ] 修辞疑問の意味もわかってないのに使うからだよw みっともないなぁ。
809 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:57:26 ] これは勝利宣言っぽいな。或いは単に言葉が足りない。
810 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:23:03 ] >>790 WiLiKiはだいたい見てるつもりだったけど気づいてなかった。 peg使ってみたかったけどコンパイルめんどいからリリース待ちだったので、 不意に動くバイナリが手に入って嬉しい。 ところでGaucheはもう完全にSubversionに移行してんの?
811 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:44:01 ] 言葉遊びなんかどうでもいいんだよ。 evalのお手本、誰か書いてよ。簡単そうに言ったんだら。 マジ、期待したのに。
812 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:30:25 ] evlis[m;a] = maplist[m; \[[j];eval[car[j];a]]]
813 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:31:12 ] evcon[c;a] = [null[c]->error[A3]; eval[caar[c];a]->eval[cadar[a];a]; T->evcon[cdr[c];a]]
814 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:32:21 ] apply[fn;args;a]=[ null[fn]->NIL; atom[fn]->[get[fn;EXPR]->apply[expr;args;a];
815 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:34:46 ] M式とはまた古風だな
816 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:41:34 ] evalくらいでエバらないでよね!
817 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:45:59 ] LISP 1.5 の論文の丸写しだなw
818 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:55:40 ] SchemeはS式で意味論が定義されていないのでLispではない、という話があったけど S式とM式を使うLispはLispではないの?
819 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:59:15 ] M式→S式は機械的に変換可能。単に表記の問題。
820 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:00:20 ] LISP 1.5 Programmer's manual の eval の定義は確か ] が一つ 足りないんだよね。丸写しするとアウトかな?
821 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:03:03 ] LISP 1.5 はM式で入力できるわけじゃないしね
822 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:08:30 ] >SchemeはS式で意味論が定義されていないのでLispではない、という話があったけど すごい燃料を投下する奴もいたもんだ(w どうなったのかな?
823 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:15:38 ] >>812-814 Schemeに翻訳キボンヌ
824 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:46:27 ] もったいぶった前口上はいいからw
825 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 07:52:08 ] >>822 古い話だよ。R6RSで解決。
826 名前:822 mailto:sage [2008/06/24(火) 08:00:17 ] >>825 サンクス! やっぱりR6RS読んでみるか・・・ でもこれ、俺には大仕事なんだよな〜 orz
827 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 10:08:52 ] つ「はてなようせい 意味論」でググれ
828 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:00:23 ] >>818 「S式で」どころか「意味が定義されてない」Lispが多い。 だから「S式で意味が定義されてない」とLispでないなら、 多くのLispはLispではない。
829 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:06:20 ] 形式的定義だけが定義じゃないけどな
830 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:23:55 ] 自分の手でSchemeを使ってevalが書けないのが明白になりつつあるなw
831 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:39:15 ] Schemeを使ってevalを書くのは容易 だけどどの程度ホスト処理系の機能を使う事が要求されているんですか? 特別式は使っていいんですか? (define (my-eval e env) (cond ((self-evaluate? e) e) ((symbol? e) (let ((x (assq e env))) (if x (car x) 'UNBOUND))) ((and (pair? e) (eq? (car e) 'if) (pair? (cdr e)) (pair? (cddr e)) (pair? (cdddr e)) (null? (cddddr e))) (if (my-eval (cadr e) env) (my-eval (caddr e) env) (my-eval (cadddr e) env))) ... )) みたいな程度でいいんですか?
832 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:39:50 ] typo (car x) -> (cdr x)
833 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 18:56:51 ] >>831 もともと>>782 の説明に使うevalが求められていたから、その違いを表面化させることが出来るならホスト処理系の機能を使う事が許されていると思う。
834 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:38:52 ] 機種依存無しで違いを表面化させて再現するevalを書くの大変そうだ。 >>831 期待してるよ。
835 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:46:25 ] 簡単だろ。 というかSICPの課題させようとしてるだろ? 大学の宿題か?
836 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:52:07 ] >>835 話しそらすの上手だね。 >>723 から始まったbeginのトップレベルの継続の違いを再現してみせる2種類のevalが本題。 別に宿題とか云う次元の話じゃない。逃げたきゃ逃げれば?どうせ匿名だし。
837 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:54:57 ] どうせ匿名なんだから構わなきゃいいのにw
838 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:29:22 ] >>835 はいい奴だと思う。 M式書き写してLISP 1.5のウンチクたれてる誰かさんより。
839 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 03:21:49 ] いい奴だが不要だ
840 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 04:35:41 ] >>836-837 結局、処理系のソースでも読んで君自身で作るしかないだろうな。 違いを再現するためにevalを作れという事は、 つまり「継続を含んだeval」が必要で、 そのevalと同位の継続もファーストクラスとして必要になる。 そうでないと組み込みbeginと構文唐beginの違いは多分理解できない。 ここの住人は冷めてるから、いくら喚き散らしても そこまで面倒な事をこの流れでやるわけがない。 ちなみに継続はSICPの範囲外だ。 がんばれ。
841 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 05:53:13 ] しょうがねえなあ、ちょっと書いてやるから後は考えろ。 (define (eval exp env cont) (cond ((number exp?) (cont exp)) ((symbol? exp) (eval-var exp env cont)) // ry (else (eval-list exp env (lambda (l) (apply (car l) (cdr l) cont))))))
842 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 06:04:33 ] on lispに
843 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:44:15 ] R5RSの解釈の問題なら、仕様書を読まずに解決することはあり得ないですね
844 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 08:41:26 ] (begin (define cc #f) (display (call/cc (lambda (c) (set! cc c) (cc 'hoge)))) (display 'fuga) (cc 'moga)) が無限ループにならない実装はtop-levelのbeginだけ特別にスプライスして (eval '(define cc #f) (interaction-environment)) (eval '(display (call/cc (lambda (c) (set! cc c) (cc 'hoge)))) (interaction-environment)) (eval '(display 'fuga) (interaction-environment)) (eval '(cc 'moga) (interaction-environment)) とやっているからで、これはevalの実装というよりマクロの展開方法の違いと言える。 ちなみにR5RSは一塊でevalしてもスプライスしてevalしてもどっちでもよかったと思うけど。
845 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 14:34:35 ] >とやっているからで、これはevalの実装というよりマクロの展開方法の違いと言える。 >ちなみにR5RSは一塊でevalしてもスプライスしてevalしてもどっちでもよかったと思うけど。 これDrSchemeとか他の処理系を確認して書いた?
846 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 14:38:39 ] >というかSICPの課題させようとしてるだろ? >ちなみに継続はSICPの範囲外だ。 Seasoned Schemerには継続が出てくる。
847 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:09:03 ] R5RSの5.1節を 「beginで囲んでも囲まなくても意味が変わらない」 と解釈するならスプライスするべきです。 意味が変わるというなら、どう変わるのか明確にするべきです。
848 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:22:20 ] >>845 「処理系確認する」ってやり方で判定すると、 「どっちでもいい」個所がどんどん増えるだけだと思うが?
849 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 16:10:38 ] >>847 のように考えた人が作ったのでDrSchemeはあのように動作しているらしい。 それはここを見れば解るよ。 www.cs.brown.edu/pipermail/plt-scheme/2006-August/014277.html 明確な根拠が書かれていれば嬉しかったのだが・・・残念
850 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 16:27:08 ] >>848 かなり上のほうでGaucheとDrSchemeを比較してたから。 確認して書いてるなら話がつながるだろ?
851 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 16:42:05 ] >>847 > R5RSの5.1節を At the top level of a program (begin <form[1]> ...) is equivalent to the sequence of expressions, definitions, and syntax definitions that form the body of the begin.
852 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 17:27:47 ] >>851 >is equivalent to この文をどう解釈するか。 ひとつめは >「beginで囲んでも囲まなくても意味が変わらない」 という立場だ。 もうひとつは >意味が変わるというなら、どう変わるのか明確にするべきです。 という立場だ。Gaucheの挙動はこっちだった。 ここまでの流れ: Gaucheの挙動ってエラーじゃねえの?=>エラーじゃねえよ!=>ならeval書いて説明してみろよ=>evalなんて簡単。=>さっさと書け、ゴラァ! =>ほら書いてやったぞ=>それじゃ意味が明確になってねえぞ、ゴラァ!(今このへん)