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


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

Lisp Scheme Part22



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

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なんて簡単。=>さっさと書け、ゴラァ!
=>ほら書いてやったぞ=>それじゃ意味が明確になってねえぞ、ゴラァ!(今このへん)

853 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 17:33:04 ]
>>852
> ならeval書いて説明してみろよ

この馬鹿発言は無視すべき


854 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 18:39:07 ]
eval書いて説明するような話じゃないよな



855 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 18:45:43 ]
Gaucheの挙動ってバグじゃねえの?
=>バグじゃねえよ!
=>R5RSではトップレベルの実行はREPLの実行と区別されていないよ、R6RSではREPLが廃止されたけどね
=>REPLってなーに?
=>Read Eval Print Loop
=>(define (eval e) e)
=>S式の評価なのに値呼びpgr
=>ならてめーが手本を見せてみろよ
=>(マッカーシーの論文の丸写し)
=>自分の手で書けねーのかよ
=>evalなんて簡単。
=>さっさと書け、ゴラァ!
=>ほら書いてやったぞ(<=今このへん)
じゃない?

継続の底を説明する為にevalを書くって話は832で初めて出てきたような

856 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 18:49:29 ]
(define (eval e) e) は近年まれに見る傑作だな。w






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

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

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