[表示 : 全て 最新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

37 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:35:29 ]
まあ答えが間違ってるんだからどこかが違うんだろう

38 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:36:35 ]
>>36
もう少し具体的に言うとどういうところ?

39 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:39:58 ]
>>37
ばーか。答は合ってるんだよ。ちっとはググレ。解き方が変なんだ。

40 名前:デフォルトの名無しさん [2008/05/23(金) 20:17:44 ]
>>38
(xor (@) (B))だと(少なくとも一方が嘘)ではなく(どちらか一方が嘘)になる

41 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:59:26 ]
こうじゃないですか?
ttp://codepad.org/hiI1QK5U

42 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:47:12 ]
>>40-41
残念。答が違うよ。

43 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:49:04 ]
論理プログラミングってのは意外と答がちゃんと出ないモンなんだね。

44 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:52:40 ]
ということにしたいのですね

45 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:52:48 ]
>>41
(not (and (@) (B)))ではだめ。それだと両方とも嘘だということになって意味が違ってしまう。



46 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:55:19 ]
(or (not (@)) (not (B))) ってことじゃね?

47 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:55:59 ]
「さらに調べたところ,三月ウサギとヤマネの少なくとも一方は嘘だということがわかりました.」
なら三月ウサギとヤマネの両方が嘘でも真では?

48 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:05:01 ]
(or (not (@)) (not (B))) でやっても答が合わない。
ttp://codepad.org/BiVICzJG

49 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:06:03 ]
>>47
ベン図書いてミソ。

50 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:07:43 ]
あちこち見た結果、>>23が正解らしい。でもなぜ?

51 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:08:23 ]
少なくとも一方は○○ と どちらか一方は○○
は違いますよね?

52 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:11:47 ]
>>41>>48はrequireが2つなのに、>>23には3つあるんだよな。
文章からココを読み取れるかどうかが論理プログラミングの難しいところか。

53 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:14:48 ]
>>51
なら>>41>>48が同じ答になるのは何故?

54 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:17:33 ]
答えに合わせてプログラミングしてるように見えるのは気のせいですか?

55 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:25:39 ]
>>54
それは違う。
論理的帰結としてrequireになることがわかった枝をこのschemeの論理プログラムでは自動的に修正できない。
そこで、プログラマーが自分でその枝をrequireにしてやらなければならない。
半自動定理証明を調べてみろ。



56 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:39:59 ]
2人組がいる。少なくとも1人は男だ。
(男 . 男) -> #t
(男 . 女) -> #t
(女 . 男) -> #t
(女 . 女) -> #f

2人組がいる。どちらか1人は男だ。
(男 . 男) -> #f
(男 . 女) -> #t
(女 . 男) -> #t
(女 . 女) -> #f

>>53
志村〜、ド・モルガン

57 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:44:16 ]
>>55
あ、そっか。対話型でやってる部分はそういう項を書き換えてるということだね。
つまり>>23は書き換え操作が入ってるから枝が増えてるということか。

58 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:04:49 ]
>>53,>>56
それはわかったw

59 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:07:06 ]
おれも正解にたどり着いた。「不思議の国のアリス」ってこんな難しかった記憶無いぞw
ttp://codepad.org/0pMJwn0y

60 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:14:56 ]
>>23>>59は同じなの?

61 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:15:09 ]
なぜこんなにヤマネは信用されてるんでしょう?

62 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:15:51 ]
そもそも
(define (誰かひとりが犯人?  . ls)
    (cond
     ((eq? (car ls) '有罪) (and (eq? (cadr ls) '無罪) (eq? (caddr ls) '無罪)))
     ((eq? (cadr ls) '有罪) (and (eq? (car ls) '無罪) (eq? (caddr ls) '無罪)))
     ((eq? (caddr ls) '有罪) (and (eq? (car ls) '無罪) (eq? (cadr ls) '無罪)))))
の不備は不問?

63 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:22:27 ]
ヒント:手で計算した人は皆同じ答えを出しています。

64 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:27:56 ]
同じじゃない。>>59の1つ目のrequireは@とBが両方とも嘘の場合を含んでるけど、
>>23のは含んでない。
でも、>>23も正解に到達するのは2つ目のrequireを追加することが両方とも嘘の場合を却下したからだ。
だから>>59の両方とも嘘の場合もキャンセルされて、>>23>>59は同じ結果になる。
ということは>>23はrequireを追加しただけじゃなく(not(and@ A))も書き換えてることになる。

65 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:29:33 ]
>>64>>60への返答。



66 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:31:38 ]
ウサギ「俺じゃない」
帽子屋「俺じゃない」
ヤマネ「ウサギか帽子屋のどちらかだ」

67 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:37:02 ]
ヤマネの主張をrequireしたら必然的にウサギが犯人になる
なぜヤマネの主張をrequireする?

68 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:43:43 ]
>>62
(define (誰かひとりが犯人? . ls)
(cond
((eq? (car ls) '有罪) (and (eq? (cadr ls) '無罪) (eq? (caddr ls) '無罪)))
((eq? (cadr ls) '有罪) (and (eq? (car ls) '無罪) (eq? (caddr ls) '無罪)))
((eq? (caddr ls) '有罪) (and (eq? (car ls) '無罪) (eq? (cadr ls) '無罪)))
(else #f)))

こうだよねw

69 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:46:43 ]
>>68の修正と>>59を合体したが結果は同じ。
ttp://codepad.org/XTHODItB

70 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:50:30 ]
(require (xor (xor
                   (eq? 帽子屋 '有罪) (eq? ヤマネ '有罪))
                 (xor (eq? 三月ウサギ '有罪) (eq? ヤマネ '有罪))))
があるってことはヤマネは常に正しい事を言ってるんですね。
ヤマネの弁護士の方ですか?

71 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:05:26 ]
もしも帽子屋がうそをついたならウサギもヤマネも無罪。⇒ウサギが無罪なら、ウサギは本当のことを言った。⇒ヤマネも本当のことを言った。
しかし、ウサギとヤマネが少なくとも一方は嘘だということに矛盾する。
したがって、帽子屋は本当のことをいった。ここまではわかった。

72 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:09:28 ]
>>66のように三人とも自分が犯人ではないと主張しているだけで
犯人であることと嘘を言っていることは同値ということになります

で、ウサギとヤマネの少なくとも一方が嘘ですが、これ以上絞り込めません

73 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:13:43 ]
他のサイト見たら
>ヤマネ 「ウサギと帽子屋のどちらか一方だけが本当のことを言っています」
ヤマネ 「ウサギと帽子屋の少なくとも一方は本当のことを言っています」
になってた。つまり、帽子屋が本当のことをいった時点でヤマネは本当のことを言ったことになる。
つまり>>18の問題文は間違ってる。その結果、2通りの答が出ることになったと思う。
たぶん、>>23は他のサイトでも見てるんだろう。>>70の主張が正しいと思う。

74 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:34:54 ]
(display-line (amb))じゃなくて
(let loop () (and (amb) (loop)))とかにしたほうがいいですね

75 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:31:24 ]
つ「不思議の国のアリス」【論理パズル】

女王様のジャムが盗まれました.犯行は単独犯によるものだとい
うことがわかっていて,容疑者は三月ウサギと頭のいかれた帽子屋とヤマネです.それぞれを取
り調べたところつぎのような証言をしました.

三月ウサギ 「私は絶対にジャムなど盗んでいません.」

帽子屋 「私たち3人のうち1人がジャムを盗みました.でもそれは私ではありません」

ヤマネ 「ウサギと帽子屋の少なくとも一方は本当のことを言っています」 ←修正!

さらに調べたところ,三月ウサギとヤマネの少なくとも一方は嘘だということがわかりました.
ジャムを盗んだのは誰でしょうか?

ttp://codepad.org/ffEosmDe



76 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:37:07 ]
あ、>>75のリンクは間違い。

77 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:43:25 ]
>>71,>>73
てことは、ヤマネが正しいことを言った。⇒三月ウサギとヤマネの少なくとも一方は嘘だ。⇒「私は絶対にジャムなど盗んでいません.」 が嘘。
つまりウサギが有罪。

78 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:44:39 ]
で、最終的にどんなプログラムになるの?

79 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:54:17 ]
そもそもの問題として、不思議の国のアリスは関係ない
これはレイモンド=スマリヤンの『パズルランドのアリス』という有名な論理パズル本の問題
ttp://www.amazon.co.jp/dp/4150502889

80 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:58:55 ]
>>75
ヤマネは自明なことを言ってるだけだな。

81 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:04:18 ]
発言だけじゃなくて「ルール」も厳密じゃないといけないんだよな
「ウサギとヤマネの少なくとも一人は嘘をついていることが確定している」
でいいのか?
「ウサギとヤマネの言ったことは真実であるとは限らない」
ではなく?

82 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:16:55 ]
うろ覚えではなく完全コピペの問題文でないと駄目だな
この手のは時々勝手な条件をつける人がいたり
省略や改変で余分な条件がついたりしてよく破綻する

83 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:51:10 ]
つまり叙述トリックですね。わかります。

84 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:30:28 ]
うざいんで、他でやってもらえますか

85 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:52:36 ]
うざいだけなら君が我慢しよう



86 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:54:41 ]
有名な問題をそのまま出すと、解く側もぐぐってコピペして提出するだけだからなあ
宿題にしても仕事にしても、そんなに甘くはないだろう

87 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 11:01:07 ]
改変したせいで解が複数になったり不定になったりするんじゃ出題者の底が知れるがね

88 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 11:13:02 ]
ジャンガジャンガジャンガジャンガ 
ジャンガジャンガジャンガジャンガー

89 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:33:59 ]
prolog で解いてみた。いろいろ微妙。
xor( A, B ) :-
A -> ¥+B ; B.

truth(Is) :-
Is = [ [rabbit, g], [hatman, n], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, g], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, n], [yamane, g] ] .

rabbit_says(Is) :-
truth(Is),
member( [rabbit, n], Is ).

hatman_says(Is) :-
truth(Is),
member( [hatman, n], Is ).

yamane_says(Is) :-
xor( rabbit_says(Is), hatman_says(Is) ).

more_research(Is) :-
xor( rabbit_says(Is), yamane_says(Is) ).

solve(It) :-
truth(It),
yamane_says(It),
more_research(It).

?- findall(It, solve(It), All).
All = [[[rabbit, g], [hatman, n], [yamane, n]]].


90 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:38:23 ]
共犯の可能性は考えないの?

91 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:44:27 ]
>>90
犯行は単独犯によるものだということがわかっていて,
容疑者は三月ウサギと頭のいかれた帽子屋とヤマネです.

スマリヤン本持っている人、原著・翻訳本では正確な問いはどんなですか?

92 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 16:08:40 ]
>>91
"Did YOU by any chance steal the jam?" the King asked the March Hare.
"I never stole the jam!" pleaded the March Hare.

"What about YOU?" the King roared to the Hatter, (中略)
"No, no!" pleaded the Hatter . "One of us stole it, but it wasn't me!"

"And what about YOU?" continued the King to the Dormouse.
"What do you have to say about all this? Did the March Hare and the Hatter both tell the truth?"
"At least one of them did," replied the Dormouse, (中略)

As subsequent investigation revealed, the March Hare and the Dormouse were not both speaking the truth.
Who stole the jam?

93 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 16:29:17 ]
んでもって解答
The Hatter said, in effect, that either the March Hare or the Dormouse stole it.
If the Hatter lied, then neither the March Hare nor the Dormouse stole it,
which means that the March Hare didn't steal it, hence was speaking the truth.
Therefore, if the Hatter lied, then the March Hare didn't lie,
so it is impossible that the Hatter and the March Hare both lied.
Therefore the Dormouse spoke the truth when he said that the Hatter and March Hare didn't both lie.
So we know that the Dormouse spoke the truth. But we are given that the Dormouse and the March Hare didn't both speak the truth.
Then, since the Dormouse did, the March Hare didn't.
This means that the March Hare lied, so his statement was false, which means that the March Hare stole the jam.

これから逆算するに

ウサギ「私は盗んでいない」
帽子屋「ウサギかヤマネのどちらかが盗みました」
ヤマネ「帽子屋とウサギの両方が嘘を言っていることはありえません」
ルール:必ず単独犯で、ウサギとヤマネの両方が真実を告げているということはありえない


>>75が正しいかな

94 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 16:37:43 ]
>>89
お前wwなんでもかんでもxorしやがって

notを使うのが怖いからヤマネが正しいことを前提にしてるのか?

95 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:51:54 ]
(let ((* (amb 'usagi 'bousi 'yama)))
(let ((usagi (amb #t #f)) (bousi (amb #t #f)) (yama (amb #t #f)))
(when usagi
(unless (not (eq? * 'usagi)) (amb)))
(when (not usagi)
(unless (eq? * 'usagi) (amb)))
(when bousi
(unless (not (eq? * 'bousi)) (amb)))
(when (not bousi)
(unless (eq? * 'bousi) (amb)))
(when yama
(unless (or usagi bousi) (amb)))
(when (not yama)
(unless (not (or usagi bousi)) (amb)))
(unless (or (not usagi) (not yama)) (amb))
(display *)
(newline)
(amb)))



96 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:58:15 ]
OSの操作もぜ〜んぶScheme、S式で処理してしまうなんてことできないですか?

(dir 'c) なんてやると

(fileA fileB fileC ...)
みたいに返ってくるような。

S式で全部閉じた世界ってのを空想してます。

97 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:03:55 ]
>>94

山根の証言が正しいことを前提にしてたのは、そうしないとヤマネも犯人になっちゃってたからw
あと、not を使うのが怖いってどういう意味?
ともかく、>>93を参考にしてもう一回問題を読み直して、ヤマネの証言に依存しないようにした

truth(Is) :- % 単独犯である
Is = [ [rabbit, g], [hatman, n], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, g], [yamane, n] ] ;
Is = [ [rabbit, n], [hatman, n], [yamane, g] ] .

rabbit_says(Is) :- % ウサギの証言
member( [rabbit, n], Is ). % 俺はやってない

hatman_says(Is) :- % 帽子屋の証言
member( [hatman, n], Is ). % 俺もやってない

yamane_says(Is) :- % ヤマネの証言
¥+( ( ¥+rabbit_says(Is), ¥+hatman_says(Is) ) ).
%% ウサギと帽子屋の両方が嘘を言っていることはあり得ない

more_research(Is) :- % その後の調査
¥+( ( rabbit_says(Is), yamane_says(Is) ) ).
%% ウサギとヤマネの両方の証言が真実だとはあり得ない

solve(It) :-
truth(It),
more_research(It).

?- findall(It,solve(It),All).
All = [[[rabbit, g], [hatman, n], [yamane, n]]].


98 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:04:58 ]
>>96
こんなの?

www.scsh.net/

99 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:44:32 ]
>>96
symbolicsの中古探してみるとか?


100 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:52:35 ]
>>97
findallはProlog標準関数ですか?
働きがよくわかりません。

101 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:12:06 ]
>>100

適当に説明すると、findall は第2引数(述語)を満たすような第1引数(変数)のリストを第3引数(変数)に束縛する。
ここでは、このプログラムがウサギが犯人であることを導くことと、それ以外の結論を導かないことを示すために使った。

ttp://www.cs.ualberta.ca/~you/courses/325/Mynotes/Log/builtin.html
の "3. Finding all solutions" も参考になると思う

102 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:51:55 ]
>>98
>こんなの?
そうそう、そういうの。そういうのをWindowsで欲しい、作りたい。

>>99
>symbolicsの中古探してみるとか?

マジに中古あったらい欲しいっす。プレミアついてるんだろうか。
性能は今のパソコンより遥かに劣るんだし、安く手に入らんかな〜。


103 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:11:57 ]
connection machine がうちの研究所にあったらしいんだけど
捨てちゃったらしんだよね。俺が来るだいぶ前に。


捨てたってそれどういうことよ。
ありえないよ。
捨てるんだったら俺にくれ。

104 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:13:25 ]
>>103 電気代どうするよwwWw


105 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:15:39 ]
第五世代の ψマシン、中古で放出しないかね。

たしかに電気代は心配だなぁ。



106 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:19:32 ]
>>103
自宅に200V電源あるのか?

107 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:25:50 ]
>>106
ブレーカ 1 個つけりゃ 200V なんてすぐとれるだろ?
それとも 3相 200V が必要なのか?


108 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:16:06 ]
>>107
途中のいろんなところに負荷が掛かるから自宅以外の工事も必要だろ常考。

109 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:02:19 ]
>>101
d。わかりました。
solve(It)という制約条件を満たすItをバックトラック(?)して見つけて、それをAllにbag-ofする関数ですね。

110 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:06:52 ]
(amb)と(require)と(bag-of)ってのは便利なんだね。

111 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:44:07 ]
200Vつったら普通三相じゃねーの?

112 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:50:06 ]
>>111
家庭の分電盤は単相三線が多い。
普通のコンセントには 100V + 100V として供給。
エアコンには 200V (センターアース)で供給。

113 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:58:18 ]
>103
特定しますた

…漏れも触ってみたかった orz

114 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 01:33:58 ]
>>103,104
通常の家屋じゃ電気代の前に床がもたんので貰っても結構高く付きそう。


115 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 08:39:43 ]
Connection Machine か…。時代を先取りしすぎたよな。
チップ単体の性能向上に限界が見えつつある現代にこそふさわしい。



116 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:32:04 ]
ベストエフォートのあのバスが先取りだってえ?

117 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:36:49 ]
がらくたの話してる奴に一言。

「お前の話はツマラン」

118 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:39:40 ]
>>117
さらに上を行ってどうするw

119 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:43:27 ]
自分にだけは甘いっていうか、
自分の書くことが悉く金言至言に思えちゃう年頃なんですよ

120 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:44:33 ]
今年は春が長いな。

121 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 17:43:18 ]
プログラマってのはゴミみたいな奴ばっかだなw
その吹き溜まり社会に行かなくて良かったと思えるスレだなw

122 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 18:52:33 ]
本質を見失って中傷することだけが正義と捉える輩にはうんざり。

123 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 19:59:11 ]
本質の話をしようぜ!

124 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:07:35 ]
マクロが書けさえすれば、S式は本質的には必要ないです。

125 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:46:08 ]
Far Cry!



126 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 21:17:13 ]
たしかにマクロアセンブラで書ければ本質的には高級言語はいらないわけだが・・・
そんな生活に戻るのはおらまっぴらだ。

127 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 21:28:29 ]
まんまんぴらぴらだ

128 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:06:15 ]
>>126
それはまた逆の意味で極端ですね。本質wは両極端の中間に位置していると思います。

129 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:39:31 ]
S式を超える表現を思いついたらすげーな。

130 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:17:55 ]
>>126
今でもマクロアセンブラレベルでしか書けないマシンもあるからあんまりいぢめんな
メモリさえ許せばとりあえずlisp1.0系を導入して、強引に繋いだキーボードでテスト基盤を調査とかすることはよくあると思うんだけどどう?
組み込みよりのちょっと大きめのプロダクト扱う会社だとテストでインタラクティブ環境作れるlispやもちっと小さいインタプリタを自前で持ってるよね?
少なくともおいらのしってる会社で4件はあったよ(うち2件がlispだった)


131 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:38:56 ]
組み込み系はGCの移植・検証がめんどくさいな

132 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:41:26 ]
そゆ用途ならForthじゃね?実績的に。

133 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:24:48 ]
そういえば、BASICとassemblyしか知らなかった俺に、
美しいプログラミングの世界をかいま見せてくれたのがFORTHだった。


134 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:50:29 ]
130です
>>132の言う通り残りの1件はforthでした、しかも、もっとメモリ制約の有った案件が10件他にあってそれは全部forth系です。
ようするに若干メモリに余力無いと採用できないのは本当です



135 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:52:18 ]
補足
全部で1Kワードのメモリしか無いのが残りね。
最初の4件は32Kワードあった




136 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 04:12:04 ]
>>131
GCを極力使わない方法もある。
運用の仕方でGCレスも可能。
メモリも100KBもあれば余裕で動くんじゃないの。
組み込みつっても最近のは余裕あるでしょ。

137 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 09:28:07 ]
>>135
それROMは別でしょ?
余裕でLisp動くじゃない。

138 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 09:29:11 ]
Lispできついのはメモリ空間/ポインタの扱いじゃない?
組み込みだとアドレス空間の割り当てが、案件ごとに違うだろうし。

139 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:03:39 ]
>>138
配列が使える状況であればどうとでもなる。
セグメントの話ならFORTHでも同じ事だし、
頻繁にreadするのでもない限りRAMもそれほど必要ない。
最終的に何かを制御するだけならGCも省ける場合がある。
どういうプロセッサできついのか具体的に
挙げてくれると判りやすいけど。

140 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:36:40 ]
ポインタのサイズが16ビットだったり24ビットだったり


そういえばdoubleは64ビットだから組み込み以外でも問題になるね

141 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:42:39 ]
short型のコンスとlong型のコンスがあったりするの?

142 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:43:07 ]
ttp://www.forth.org/compilers.html

143 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:18:26 ]
>>140
難しく考えすぎじゃないのか?
組み込みでdoubleなんて使うのかね。

144 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:16:53 ]
ニコスクリプトで pure lisp
www.nicovideo.jp/watch/sm3452591

145 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:41:48 ]
>>139
1KワードしかRAMがなければ、
組み込みシンボルオブジェクトの一部や組み込み関数の定義部は、
ROMに入れたくなるから、
> 配列が使える状況であればどうとでもなる。
は、そんな簡単にポータブルな実装にはならない。

「どうにでもなる」と言えば、どうにでもなるんだが。




146 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:45:09 ]
ROMとRAMで空間が分かれてるタイプのプロセッサはちょっと使いにくいかもだな

147 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:53:50 ]
>>145
お前口ばっかで全く作ったこともないだろ。
1ワードだから何だよ。それが仕事なら作るだろ。
むしろそんな環境でLispに出番があるのか疑問だが。

148 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:54:52 ]
Kが抜けてたw
まあそういう事。

149 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:12:36 ]
横レススマソ。
1984年ごろのパソコンが128kぐらいだったのを考えると
最近の組み込みなんてメモリサイズが大きいという希ガス。
で、1kワードRAMって何に使うの?

150 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:19:18 ]
>>143
組み込み 以外 でも、と言ってる

doubleのようにポインタのサイズより大きいオブジェクトは
間接参照やメモリ割り当てで遅くなるだろ?

151 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:21:35 ]
>>150
普通のLispの処理系一般に当てはまる問題だが、そういう一般的な話がしたいの?

152 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:19:08 ]
ところで、横槍を入れるときはそう言うべきなの?

153 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:33:27 ]
>>150
>>140の「そういえば」はどこに掛かるんだよ。酔っ払いか?
で?間接参照で遅くなるから何すか?


154 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:10:09 ]
>>152
特定の二人だけであまりに必死な会話を展開してるときは
そう言いたくなることもある。たまに。

155 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:14:49 ]
>>147がなんでかみついてるのかいまいち把握できん
元の書き込みも1Kワードのマシンじゃforthだって書いてるじゃん(っていうか他に選択肢あるのか1Kで)




156 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:22:55 ]
だから、それが何なんですかね?forth大好きおじさん。
lispスレに何の御用ですか?

157 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:48:17 ]
自分じゃ頭は良いけど性格が悪いキャラのつもりで
単に頭が悪いキャラなのは勘弁して欲しいなぁ

158 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:51:53 ]
どちらかと言うと、気に入らない書き込みしてるのが1人に見えてしまう法則発動かと。

159 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:30:20 ]
MindStormsで動く湯浅先生のLispってどう?
使った人いる?


160 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:07:40 ]
GaucheでLittle Schemerにのってる以下の関数を実行すると、
メモリ以上に食って終わらなくなるのですが。
(define add1
 (lambda (n)
  (+ n 1)))
(define A
 (lambda (n m)
  (cond
   ((zero? n) (add1 m))
   ((zero? m) (A (sub1 n) 1))
   (else (A (sub1 n)
       (A n (sub1 m)))))))

161 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:11:48 ]
そうでしょうね

162 名前:163 mailto:sage [2008/05/27(火) 12:16:03 ]
>>161
私、何か間違ってますでしょうか?

163 名前:163 mailto:sage [2008/05/27(火) 12:34:36 ]
163

164 名前:へだま ◆7JLFh7E/wI mailto:sage [2008/05/27(火) 12:34:56 ]
>>162
ttp://mathworld.wolfram.com/AckermannFunction.html
このへんの記事が御参考になればよいのですが



165 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:42:26 ]
すまそん、wikipedia.jp見てました。計算量が爆発する関数なんですね。
どうもです。



166 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:48:49 ]
アッカーマン関数なんて懐かしいな

167 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:17:25 ]
タイムボカンシリーズか。懐かしいよな。

168 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:46:00 ]
>>140
Pointer(Address Reg)のサイズが 16bits って 8BitsMPU とかだよね? メモリー空間が64Kの世界かぁ。うむむ。

169 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:35:29 ]
>>168
たまには8086も思い出してください(個人的には嫌いだがw)


170 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:02:48 ]
あの変態的な「セグメントと称する物」は2度と見たくないw

171 名前:デフォルトの名無しさん [2008/05/28(水) 07:53:43 ]
Windows環境でGaucheでCGIプログラミングをしようとしているのですが

#!E:/Gauche/bin/gosh.exe
(display "Content-Type: text/plain;\n\nHello, Gauche!\n")

と書くとInternalServerErrorが出ます。
goshのパス自体はこれで正しいのですが、何かやり方を間違っている所があるでしょうか?
初心者質問ですいません。


172 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 08:05:14 ]
>>171
まずHTTPサーバのログを確認。
つぎにコマンドプロンプトで
C:\foo> E:\Gauche\bin\gosh.exe bar.cgi
とかやってみる。これで動くなら設定が悪い。


173 名前:デフォルトの名無しさん [2008/05/28(水) 10:41:42 ]

サーバーのログ見たら
Premature end of script headers: mb.cgi
*** ERROR: cannot find file "./D:/ws/hp/scheme/mb.cgi" to load
との事。
プログラムのあるフォルダで、コマンドプロンプトで動作させたときはきちんと動きますが
gosh "プログラムの絶対パス"
とすると同じエラーが返るのでこれが原因のようです。
もうちょっと頑張らないと…


174 名前:デフォルトの名無しさん [2008/05/28(水) 11:04:50 ]
解決いたしました
goshの引数で「-l」付けたら行けました
ご助言ありがとうございます。

#!E:/Gauche/bin/gosh.exe -l
(display "Content-Type: text/plain;\n\nHello, Gauche!\n")

175 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:10:25 ]
TI-Explorerって面白そう。他に情報ないかな?

ttp://cadr.g.hatena.ne.jp/g000001/?word=*%5BLisp%E3%83%9E%E3%82%B7%E3%83%B3%5D



176 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:16:53 ]
こことか
ttp://victor.se/bjorn/lispm.php

177 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:28:42 ]
ttp://www.unlambda.com/cadr/index.html

178 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:32:51 ]
マニュアル(PDF)
ttp://www.bitsavers.org/pdf/ti/explorer/

179 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:39:31 ]
メモリ8Mで68020か。ハードはMacintosh II と同等ぐらいだな。時期的にもかぶってる。

180 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 00:27:16 ]
MacIvoryとかELISとかって、手に入らないのかなぁ。

181 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 12:32:08 ]
TAO/ELISのソースコードは公開できないのかねえ

ICOTはKL1 UNIX版その他を公開したから、
まだ研究が続いているものもあるのにねえ
www.icot.or.jp/ARCHIVE/Museum/IFS/about-IFS-J.html

NTTは今や私企業だから難しいかね

182 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:39:36 ]
ソースクレ厨がうざくて・・
というか、正式に依頼するなり手順踏めば手に入るものだよ。


183 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:46:09 ]
continuationについて教えてください.(下にコードを添付します)
case-Aは常に同じ状態からのcontinuation再開となるのに対し,
case-Bは前回の結果を反映したcontinuation再開となります.
continuationが生成されたときの状態をそのまま保存したものであり
continuationが呼び出されるとその状態が復元されて続きの評価が行われる
という理解からするとcase-Bの結果が理解できません.
前回のcontinuation呼び出しの影響はどこに記録されるのでしょうか.

184 名前:183 mailto:sage [2008/05/29(木) 20:46:54 ]
;;;case-A
(define continuation #f)

(let loop ((counter 0))
 (write counter)
 (if (< counter 3)
  (begin
   (if (= counter 1)
    (call-with-current-continuation
     (lambda (k) (set! continuation k))))
   (loop (+ counter 1)))    ;;ここが違う
  'finished)) ;==> 0123finished

(continuation #t) ;==> 23finished
(continuation #t) ;==> 23finished
(continuation #t) ;==> 23finished

185 名前:183 mailto:sage [2008/05/29(木) 20:47:30 ]
;;;case-B
(define continuation #f)

(let loop ((counter 0))
 (write counter)
 (if (< counter 3)
  (begin
   (if (= counter 1)
    (call-with-current-continuation
     (lambda (k) (set! continuation k))))
   (set! counter (+ counter 1)) ;;ここが違う
   (loop counter))        ;;ここが違う
  'finished)) ;==> 0123finished



186 名前:183 mailto:sage [2008/05/29(木) 20:49:13 ]
[case-Bが途中で切れてしまいました.]
[case-Bの続き]
(continuation #t) ;==> 3finished
(continuation #t) ;==> 4finished
(continuation #t) ;==> 5finished

187 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:18:32 ]
>>183
case-Bの場合で説明すると、continuationはcounterが記録されている位置だけを覚えていて、その値を覚えているわけではない。
なのでset!をすると次回は前回にセットされた値が読み出されるのでそのようになる。
って感じでいいのかな?


188 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:23:58 ]
状態が「復元され」るわけじゃなく、とっておいたそれにスイッチするだけ。
MLをちょろっと勉強して、Schemeの破壊的に変更する変数は
MLではセルになるんだと考えれば理解が早いと思う。

189 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:33:32 ]
MLをちょろっと勉強しにいくのはいいんだけど・・・
ちゃんと帰ってきてくれよな!
ラムダの門が君を待ってるよ〜(w

190 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:35:21 ]
これは意見が分かれるところで、
C言語を学んでスタックフレームを理解すれば早いという説もある。

191 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:56:00 ]
継続で保存した状態から再開したければクロージャを使うべきだと思うけど、その例では使ってない。
保存した状態(つまりクロージャ)をスタックしてバックトラックする例を勉強すればどこが違うか理解できるだろう。
非決定性とか論理プログラミングを探して読んでみると良いと思う。

192 名前:183 mailto:sage [2008/05/29(木) 22:27:39 ]
短時間の間に多くのご指導をいただきありがとうございます.
なるほど.言葉の使いかたが間違っているかもしれませんが,まとめると,
「変数の束縛関係はどこかにあるsymbol-tableに記録されているが,
『continuationは,生成時のsymbol-tableをdeep-copyしたものを保持するわけではなく
単にそのsymbol-tableへの参照を保持するだけである』」
と考えてよろしいでしょうか.
だからcontinuation生成後にそのsymbol-tableに変更が加えられると,
continuation呼び出し時には変更分が反映されている,と.

193 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:31:22 ]
>>192
symbol-tableって言い方は誤解を招くけど、大筋はそんなもんかな

194 名前:デフォルトの名無しさん [2008/05/29(木) 22:40:15 ]
文字列ポートってちゃんと閉じたほうがいいの?

195 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:11:27 ]
lispって本当に役に立つんだろうか
明日役に立つのはrubyやpythonだけど
数年後に役に立ってくれるんだろうか



196 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:19:58 ]
;;;case-A
(define continuation #f)

(let loop ((counter 1))
(if (< counter 2)
(begin
(if (= counter 1)
(call-with-current-continuation
(lambda (k) (set! continuation k))))
(write counter) (newline)
(loop (+ counter 1)))    
'finished)) ;==> 1finished

(continuation #t) ;==> 1finished
(continuation #t) ;==> 1finished
(continuation #t) ;==> 1finished

197 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:20:34 ]
;;;case-B
(define continuation #f)

(let loop ((counter 1))
(if (< counter 2)
(begin
(if (= counter 1)
(call-with-current-continuation
(lambda (k) (set! continuation k))))
(write counter) (newline) 
(set! counter (+ counter 1))
(loop counter))
'finished)) ;==> 1finished

(continuation #t) ;==> 2finished
(continuation #t) ;==> 3finished
(continuation #t) ;==> 4finished

198 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:21:15 ]
>>181
面白そうなのにもったいないよね。

199 名前:183 mailto:sage [2008/05/29(木) 23:22:21 ]
>>187->>191, >>193
厳しいご指摘もないようですので>>192で考えてみます.
どうもありがとうございました.またよろしくお願いします.

200 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:23:34 ]
call/ccに渡された継続って
なぜ末尾コンテクストじゃなくても
末尾呼び出しされるんだろう。
普通の関数と同じ扱いにすれば
参照透明性も損なわれないような気がする。
深く考えてないけど。

201 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:05:48 ]
>>199
symbol-table → binding

202 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:06:59 ]
>>200
帰ってくるのかよ!

203 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:11:35 ]
>>200
帰還方法を(継続として)渡すような双方向継続フレームワークを作るのが良かろう

204 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:20:42 ]
>201
「束縛関係(binding)を記録している所」なら「環境(environment)」なんじゃね?

205 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:26:38 ]
>>204
環境というとフラットな印象だなあ。(グローバルみたいな)
スタック状に積み重なってるイメージは束縛のほうかな。



206 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:32:47 ]
>>204-205
「環境(environment)」=「クロージャ」

207 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 00:50:22 ]
>>206
おいおい、大事なものが抜けてないか〜
それじゃ仕事になんないよ(w

208 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:46:31 ]
>>205
それは「環境」に対して持ってるイメージが狭すぎるよ。
SECDのEはenvironmentのEだぜ。

209 名前:183 mailto:sage [2008/05/30(金) 10:41:05 ]
昨日から考えていますが,まだ理解が不充分です.お教えください.
語弊があるかもしれませんが,変数の束縛関係が登録されている場所のことを「symbol-table」ということにします.
symbol-table が何枚も重なって,scope 全体の階層構造を表現しているとします.
昨日お教えいただいた「continuation は,自分が生成されたときの symbol-table への『参照』を持っている」という理解だと,
今度は >>196 の挙動が理解できません.
(>>183 の「symbol-tableの『deep-copy』を持っている」という私の最初の理解だと,>>197 の挙動が理解できませんでした.)
ここで生成される continuation が参照しているのは,let がつくる「top-level よりも 1 レベル深い symbol-table」だと思います.
>>196 の場合,末尾再帰の際に (+ counter 1) が評価されて,その結果の 2 が新たな counter の束縛値としてこの symbol-table
に書き込まれ,その後に let の本体が評価されますよね?
そうすると,loop の引数として (+ counter 1) を渡す >>196 も,set! で直接 symbol-table に束縛関係を書き込む >>197 も,
どちらも同じ >>197 のような結果を示すはずだと思うのです.なぜ >>196 が counter の最初の束縛値 1 を覚えているのでしょうか.
>>196>>197 の違いはどこにあるのでしょう?まさにそれがこの 2 つのコードを書いてみた動機だったのですが…
(多分 >>196 の評価過程をどこか間違えて理解しているのだと思います)

210 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:54:43 ]
関数呼び出しは、新しい「symbol-table」を作るだけで、元の symbol-table を書き換えたりしない。
この例だと、 (loop (+ counter 1)) を評価するたびに、 counter の値が違う symbol-table が作られる。
だから、継続に戻ると、元の symbol-table がそのまま残ってる。

211 名前:183 mailto:sage [2008/05/30(金) 12:18:01 ]
>>210
実はそれも考えましたが,この場合そうあるべきではないと思うのです.
loop を呼び出すたびに新たな symbol-table を作るとなると,末尾再帰呼び出しの回数が
大きくなるにつれて symbol-table の枚数が増え続けることになり,それを表現する stack
がどんどん伸びてしまいませんか?
これは「末尾再帰処理」の「余計なメモリ消費を行わずに繰り返しを表現する」という掟に
反するように思うのですが…
これが末尾再帰でなく通常の関数呼び出しなら >>210 さんのおっしゃる挙動で理解できます.

212 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 12:33:04 ]
>>211
もしかしたら「末尾呼び出しはジャンプに最適化される」とあちこちに書いてあるから、loopの呼び出しがジャンプになるならcounterが上書きされると思ったのかもしれないけど・・・
schemeレベルからはそう見えることはないです。
ではどうやって末尾再帰呼び出しの保証をしているのかなのですが・・・時間が無いのでだれか書かない?

213 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 12:59:06 ]
末尾再帰呼び出しだからといって(リソースの食いっぷり以外の)挙動が変わるわけではない。
普通に再帰呼び出ししてると考えたほうが判りやすいのではないかな。

214 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 13:08:16 ]
末尾コンテキストでの呼び出しは、実際にはスタックフレームに
積まれた引数を移動させるコストが発生する。
コンパイラがフロー解析していたり、単純な呼び出しならば
直接不要になった変数を破壊する書き換えが行われる場合がある。

それと、コンパイルされれば局所変数は相対位置で参照されるので
通常は名前なんかはスタック上に保持していない。
つまりsymbol-tableという言い方はおかしい。

215 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 15:20:37 ]
スタックという言い方もおかしいかもしれないな。
スタックというと「ひとつしかない」「配列」を思い浮かべるかもしれないが、
概念的にはヒープ上のリストと同じように扱えるものと考えたほうがいい。



216 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 16:05:16 ]
>>214
>>215
がいいこと言った!
というわけで、誘導しようと思ったらリンクが無かったわ^^;

Three Implementation Models for Scheme
ttp://www.cs.indiana.edu/~dyb/pubs/3imp.pdf

久しぶりにラムダの門磨いときますね(w

217 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 21:19:30 ]
識別子が式に束縛される(得る)OcamlやHaskellと違って
Schemeの識別子はC言語などと一緒で
式ではなく記憶領域の場所に束縛される。

末尾再帰の最適化に関しては
スタックフレームの参照で考えると

A→B→C ;;普通の関数呼び出しのスタックフレームの参照連鎖

A→ →C ;;末尾呼び出しの場合はAとCを直接つないじゃえ、どうせCから値を直接返そうがBが値を返そうがプログラマから見れば同じだし
  B

A→C ;;Bはどのスタックフレームからも参照されてないのでGCに回収されました

ってな感じで定数空間で末尾再帰されてると考えてもいいかも。
実際の処理系はもっと効率よくやってるはずだけど。

218 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 23:15:06 ]
>>211
> それを表現する stack がどんどん伸びてしまいませんか?

末尾再帰の場合はそうせずに済むってことだよ。

219 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 23:17:44 ]
>>217
良い説明だと思う。
こういう風にきちんと考えないと、継続が絡んだときの挙動を説明できないんじゃないかな。

220 名前:183 mailto:sage [2008/05/30(金) 23:27:08 ]
みなさまありがとうございます.
末尾再帰呼び出しについて >>217 さんのご説明が私のイメージにいちばん近くわかりやすいです.
この例で,C の呼び出しは実際には A を呼び出しているわけで,>>214 さんのいわれるような
「末尾コンテキストでの呼び出し(C)は、実際には(Cの)スタックフレームに積まれた引数を(Aに)移動させる」
処理が起きるわけですよね.
問題は,この中に continuation が混在していることなのですが,この図に continuation の
スタックフレームへの参照を追加するとどのような図になるのでしょうか.
再帰呼び出しの中で,どのようにすれば continuation が「正しい」scope を持ち続けることが
できるのかということなのですが…

221 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:11:22 ]
λ式中の束縛識別子はそのλ式がapplyされた時に動的に生成されるCで言えばauto変数。
だから再帰などで同じ手続きが呼ばれてもそれぞれの変数の束縛(アドレス)はユニーク。
λ式中の自由識別子はそのλ式がevalされ(て手続きが生成され)た時に可視な束縛(ポインタ)が参照される。
だから再帰などで同じ手続きがよばれても同一の場所(アドレス)を参照する。

call/ccが引数の手続きに渡す継続は
case-Aの場合は(lambda (x) (write counter) (newline) (loop (+ counter 1)))
case-Bの場合は(lambda (x) (write counter) (newline) (set! counter (+ counter 1)) (loop counter))
この中に現れている自由識別子(というか束縛識別子は参照されてないけど)は何度呼ばれても同一の場所を参照する。
case-Bの場合はset!でcounterが束縛されているメモリの値を書き換えてるから
書き換えられた値を参照している。
ここで(loop (+ counter 1))は手続き呼び出しだから(loop 3)等の値に評価されてから手続きに渡されている事に留意。
そして1回目のloopのcounterと2回目のloopのcounterは同一でない場所を参照してる。(スタックフレームの再利用などの最適化されていなければ)

222 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:15:27 ]
継続といっても呼び出され方が特別なだけで(末尾文脈でなくても末尾呼び出しされる)
手続きと実体は一緒だから同じように考えればOK

223 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:16:19 ]
つ metacirclar interpreter

224 名前:204 mailto:sage [2008/05/31(土) 00:35:20 ]
>183
末尾再帰や継続を勉強する前にせめてschemeの評価モデルの勉強をすべきだと思うんだ
まず「環境フレームモデル」について勉強することをお勧めするよ

225 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:50:58 ]
>>224
そういう意味じゃ>>183にとってGauche本は良書じゃなかろうか?



226 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:37:50 ]
>>183
説明してみます。

C1はcounterが1の束縛、C2はcounterが2の束縛だとすると、
最初にnamed letに入ったときはスタックは

C1

ここでcontinuationをセーブしている。
loopを呼び出すと

C1->C2

の状態になる。
で、ifからfinishで抜けている。スタックは空。

"空"

(continuation #t)を評価すると、スタックは先にセーブした

C1

の状態になって(call/cc ...)の次の式から評価が開始される。

続く

227 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:38:23 ]

そこからloopが再び呼び出されると

C1->C2'

の状態となる。ここで先のC2とC2'になる。
さてC1がどこに記録されているかだけど、これはcontinuationにぶら下がる形でヒープに保管するのが簡単な実装方法。

ところでloopは末尾再帰呼び出しなので、C1->C2やC1->C2'になるところでC1を潰してC2やC2'で上書きしてしまいそうなのだが、
これは実装がC1が破壊できないことを知っているので行われない。
これはC1がヒープに保管されているかどうかで判定するのが簡単な実装方法になる。

(continuation #t)の#tはどこにいくのか?
C1->C2'の途中に#tを持った束縛ができないか心配になるけど、この#tは(call/cc ...)の帰り値となって、スタックから取り去られることになる。

う〜ん、どうだろうか?

228 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:42:53 ]
typo御免
「の状態となる。ここで先のC2とC2'になる。」

「の状態となる。ここで先のC2とこのC2'は違う束縛になる。」
のつもり。m(_ _)m


229 名前:183 mailto:sage [2008/05/31(土) 01:52:17 ]
みなさまありがとうございます.
>>221 さんのご説明が具体的で核心をついた答そのものだと思います.
さらに >>226 - >> 228 さんのご説明は >>217 さんの例に則していて
わかりやすそうです.
少し時間がかかると思いますが処理をなぞって考えさせていただきます.

230 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 11:55:56 ]
3パターンの継続を誰か説明してあげたら?

(1) upward onlyの継続 (例外はこれで可能)
(2) 一回使ったらおしまいの継続 (コルーチンはこれで可能)
(3) 汎用的な継続

231 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 11:57:34 ]
ttp://practical-scheme.net/docs/cont-j.html

232 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:15:11 ]
>>230
(1) ひとつしかないスタックを破壊的に変更しながら使う
(2) いくつかのスタックを破壊的に変更しながら使う
(3-a) スタックを退避したりリストアしたり
(3-b) immutableパターン

233 名前:183 mailto:sage [2008/05/31(土) 12:52:01 ]
ご心配いただいて申し訳ありませんので現在の状況を報告いたします.
基本的な規則は
・closure が呼び出されれば(たとえそれが末尾再帰呼び出しであっても),
 新たな束縛環境が作られ,その環境に視点が切り替えられていく.
・continuation には,自分が生成されたときの束縛環境への参照が保持されている.
・通常処理を続けている間は,末尾再帰呼び出しに伴い次々と生成されて
 切り替えられる束縛環境をもとに評価が進められるのだが,
 ひとたび continuation が呼び出されると,その continuation 上に保持されていた
 束縛環境に視点が切り替えられる.
であり,これらに従って評価を繰り返していけば case-A と case-B の挙動の違いを
説明できるように思います.
みなさんのご説明以上の内容ではありませんが,最初のルールを充分にわかっていなかった
(つまり,末尾再帰呼び出しの場合,同じ束縛環境のまま束縛関係を上書きしてしまうと考えていた)
ことが混乱の原因であったように思います.
まだ理解が不充分だと思いますが,少しだけわかりかけてきた気がします.

234 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:41:09 ]
名古屋名物 名古屋コールチン

235 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:51:28 ]
>>234
本気で面白いと思って書き込んだのでないなら少し反省してもらおうか。




236 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:45:47 ]
俺はちょっと笑ったぞ

237 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:49:47 ]
鳥皮はコルーチンたっぷり

238 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 18:10:23 ]
>>234-237
もうしばらく静かにしておいてやれYO!

239 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:55:26 ]
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
((eq? a (car lat)) #t)
(else (member? a (cdr lat))))))

(member? 'sardines '(Italian sardines spaghetti parsley))

240 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:56:04 ]
(define intersect
(lambda (set1 set2)
(letrec
((I (lambda (set)
(cond
((null? set) '())
((member? (car set) set2)
(cons (car set)
(I (cdr set))))
(else (I (cdr set)))))))
(I set1))))

(intersect '(tomatoes and macaroni) '(macaroni and cheese))

241 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:57:19 ]
; >>230
; (1) upward onlyの継続 (例外はこれで可能)

(define intersectall
(lambda (lset)
(let/cc hop
(letrec
((A (lambda (lset)
(cond
((null? (car lset))
(hop '()))
((null? (cdr lset))
(car lset))
(else
(intersect (car lset)
(A (cdr lset))))))))
(cond
((null? lset) `())
(else (A lset)))))))

(intersectall '((tomatoes and macaroni) (macaroni and cheese) (tomatoes and cheese)))

242 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:52:40 ]
(define rember-upto-last
(lambda (a lat)
(let/cc skip
(letrec
((R (lambda (lat)
(cond
((null? lat) '())
((eq? (car lat) a)
(skip (R (cdr lat))))
(else (cons (car lat) (R (cdr lat))))))))
(R lat)))))

(rember-upto-last
'cookies
'(cookies chocolate mints caramel delight ginger snaps sesserts chocolate mousse
vanilla ice cream German chocolate cake more cookies gingerbreadman chocolate chip brownies))

243 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:18:03 ]
>>196-197で call-with-current-continuation と書いてたのを
>>241-242ではlet/ccと書いてある。(Seasoned Schemerからの例)

244 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:22:49 ]
>>239-242
「う〜ん、それならこれで十分なんじゃな〜い」ってきっと言われる・・・

(define rember-upto-last
 (lambda (a lat)
  (let loop ((ans lat) (lst lat))
   (cond ((null? lst) ans)
      ((eq? (car lst) a) (loop (cdr lst) (cdr lst)))
      (else (loop ans (cdr lst)))))))

(define intersectall
 (lambda (lset)
  (fold intersect (car lset) (cdr lset))))

なんか簡潔で説得力のある一級継続の使用例は無いものだろうか・・・

245 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:55:50 ]
継続無しでいくことが主目的ならそれでいいんジャマイカ?>>244
継続の動作の仕組みを調べる材料に使うなら>>239-242は十分な例だと思う。
継続を理解することよりも何かに例えることに力点があるうちは理解できないだろう。



246 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:28:21 ]
((call/cc
 (lambda (goto)
  (letrec ((start
        (lambda ()
         (print "start")
         (goto next)))
       (froz
        (lambda ()
         (print "froz")
         (goto last)))
       (next
        (lambda ()
         (print "next")
         (goto froz)))
       (last
        (lambda ()
         (print "last")
         (+ 3 4))))
   start))))

247 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:29:02 ]
動作を理解しても「こんなのいらね」で終わることもあるからな。良い例が欲しいな。

248 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:29:09 ]
(let* ((yin ((lambda (foo) (newline) foo)
       (call/cc (lambda (bar) bar))))
    (yang ((lambda (foo) (write-char #\*) foo)
       (call/cc (lambda (bar) bar)))))
 (yin yang))

249 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:29:33 ]
((call/cc call/cc) (call/cc call/cc))

250 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:30:21 ]
>>247
そのレベルでやってるやつには不要。


251 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:33:52 ]
>>247
クレクレうるせーんだよ。氏ね。

252 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:50:09 ]
乞食が自分で書けば良いんジャマイカ?

253 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:51:23 ]
>>250
「そのレベル」でいいんジャマイカ、と

254 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:54:47 ]
荒れてきたねw
foldで書き直せますって言う暇があったら好例を出すべきだったと思うね。

255 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:57:29 ]
>>253
おまえも馬鹿らしいなw



256 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:04:31 ]
もですね、わかります

257 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:11:52 ]
       ,;r''"~ ̄^'ヽ,
      ./       ;ヽ  新憲法で表現の自由規制、裁判官の国民審査権破棄
      l  _,,,,,,,,_,;;;;i  
      l l''|~___;;、_y__ lミ;l      ネット規制法で検閲、人権擁護法案で報道規制、
      ゙l;| | `'",;_,i`'"|;i |    
     ,r''i ヽ, '~rーj`c=/        ダウンロード違法、単純所持禁止、..etcetc
   ,/  ヽ  ヽ`ー"/:: `ヽ      
  /     ゙ヽ   ̄、:::::  ゙l, 情報源を潰して日本を中国化だ!フゥハハハーハァー
 |;/"⌒ヽ,  \  ヽ:   _l_        ri                   ri
 l l    ヽr‐─ヽ_|_⊂////;`ゞ--―─-r| |                   / |
 ゙l゙l,     l,|`゙゙゙''―ll___l,,l,|,iノ二二二二│`""""""""""""|二;;二二;;二二二i≡二三三l
 | ヽ     ヽ   _|_  _       "l ̄ ̄ ̄ ̄ ̄ ̄ |二;;二二;;二=''''''''''' ̄ノ
 /"ヽ     'j_/ヽヽ, ̄ ,,,/"''''''''''''⊃r‐l'二二二T ̄ ̄ ̄  [i゙''''''''''''''''"゙゙゙ ̄`"
/  ヽ    ー──''''''""(;;)   `゙,j"  |  | |
  _,,,,,,,,,ヽ、        ,,,,,r-'''''ーー'''|   |  | |
''"    ヽ,,___,,,r‐''''''二__    |__|  | |
          \'''"   /     ノ    | |


258 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:13:43 ]
>>256
ああいえばこういう。まじ視ね。

259 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:14:33 ]
なんか蛆虫がいっぱいw

260 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:41:53 ]
>>247良い例マダァ?

261 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:47:45 ]
荒れる方向へ誘導するなよ

262 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:51:16 ]
もうおまいら全部まとめて >>7 独習 Scheme 三週間 (Schemeの教科書 ) でも読んで寝ろよ。
定番のコルーチンとバックトラックがちゃんとのってるぞ。

263 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:53:30 ]
>>262
動作を理解しても「こんなのいらね」で終わることもあるからな。良い例が欲しいな。

264 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:16:01 ]
グダグダうるせーんだよ。乞食は氏ね。

265 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 07:28:43 ]
ambは再帰で書くと分かりにくいが、これならどうだ

(define-syntax amb
 (syntax-rules ()
  ((_ x ...)
   (let/cc yield
    (let/cc fallthrough
     (push! stack fallthrough)
     (yield x))
    ...
    ((pop! stack))))))



266 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 09:39:35 ]
>>265
そんな動きもしない中途半端な例より過去スレ嫁。
不思議の国のアリスをやってた連中がambを使ってたハズ。

267 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 10:51:03 ]
Gauche使ってる奴は独自機能を使って煙に巻きたがるんだよなw
push!とpop!の説明しないのかよ?

268 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 10:53:39 ]
(define-syntax amb
(syntax-rules ()
((_) (fail))
((_ a) a)
((_ a b ...)
(let ((fail0 fail))
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(set! fail fail0)
(cc (amb b ...))))
(cc a)))))))

(define call/cc call-with-current-continuation)

(define fail #f)

(define (require pred)
(or pred (amb)))

(call/cc
(lambda (cc)
(set! fail
(lambda ()
(cc 'no-choise)))))

269 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 11:22:04 ]
このスレも人増えてなにより

270 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 11:49:40 ]
(define call/cc call-with-current-continuation)

(define fail #f)

(call/cc
(lambda (cc)
(set! fail
(lambda ()
(cc 'no-choise)))))

(fail) ; => no-choise

271 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:02:19 ]
>>196-197と比較するとambがやってることがわかると思う。

(amb 1 2 3 4 5) ; => 1
(fail) ; => 2
(fail) ; => 3
(fail) ; => 4
(fail) ; => 5
(fail) ; => no-choise

272 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:07:54 ]
>>246
うほっ、これいいね!
出典があるなら教えて〜

273 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:17:57 ]
>>272
それ前スレにも出てた。有名なのかも。

274 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:41:12 ]
>>272
おそらく出典はGuy Steele御大です。
ttp://lib.store.yahoo.net/lib/paulgraham/cint.lisp


275 名前:272 mailto:sage [2008/06/01(日) 12:41:45 ]
ありがと^^



276 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:54:41 ]
#define d define
#d a include
#a <stdio.h>
#a <string.h>
#a <ctype.h>
#d p char*
#d P ,(p)
#d T(E) !strcmp(E,"()")
#d U return
#d W while
#d X sbrk(199)
#d z atof
#d e isspace
#d D A(_)
#d E S(C(_))
#d B(y) p y(_)p _;{
#d G(y,V) B(y)p i;U sprintf(i=X,"%lf",z(E)V z(S(C(D)))),i;}p sbrk(),*S(),*j(),*O,*H;K,Y,M=14;double z();Q(_)p _;{int V=0;W(e(*_))_++;H=_;W(V|!(e
(*H)|*H==')'||(*H=='('&&H-_)))V+=(*H=='(')-(*H== ')'),H++;U H-_;}B(C)U _++,Y=Q(_),_=strncpy(X,_,Y),_[Y]=0,_;}B(A)_++,_+=Q(_);W(e(*_))_++;U O=X,*O='(',strcpy(
O+1,_),O;}B(Z)U _;}B(c)U C(E);}B(q)U A(E);}B(t)p i=E;U H=S(C (D)),sprintf(O=X,T(H)?"(%s)":"(%s %s",i,H+1),O;}B(F)U S(C(A(T(E)?D:_)));}L(i,s)p
i,*s;{U isdigit(*i)?z(i)!=z(s):strcmp(i,s);}B(b)U L(E,S(C(D)))?"()":"t";}B(R)U E;}B(o)U z(E)<z(S(C(D)))?"t":"()";}G(f,+)G(g,-)G(h,*)p r[4][2]={"function" P R,
"quote"P C,"lambda"P Z,"defun"P j};B(j)U r[M][1]=D,*r[M++]=C(_);}p not[99][2]={"if"P F,"equal"P b,"<"P o,"+"P f,"-"P g,"*"P h,"car"P c,"cdr"P q,
"cons"P t,"t","t"};B(S)int Li,s;p u;if(isdigit(*_)|T(_))U _;for(Y=M;Y--;)if(!strcmp(_,*r[Y]))U r[Y][1];u=E,_=D;if(*u-'(')U(*((p(*)())u))(_);s=Li=M;W(!T(_))r[M][1]=E,*r[M++]
="",_=D;O=C(u);W(!T(O))*r[Li++]=C(O),O=A(O);U O=S(C(A(u))),M=s,O;}main(){H=O=X,Y=0;W(Y|!e(K=getchar()))K==EOF?exit(0):0,Y+=(K=='(')-(K==')'),*H++=K;*H=0,puts(S(O))
,main();{printf("XLISP 4.0\n");}}

277 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 13:04:34 ]
call/ccが名前つきブロックにもなるletrecを内側に持つとgotoできるのか。
letrecをループに使うのは良くみかけるけどね。
(define (count-chars)
(letrec ((loop (lambda (ch count)
(if (eof-object? ch)
count
(loop (read-char) (+ count 1))))))
(loop (read-char) 0)))

278 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:30:36 ]
好みの問題ですけど
相互再帰じゃない場合はnamed letの方が見やすいですね。

279 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:02:33 ]
>>278
こんなとこで言ってないで国際会議の場でGuy Steeleに意見しろよ。

280 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 22:18:39 ]
先月caltechのカンファで直接言ったんだけど、Fortressの後始末でそれどころじゃないみたい。

281 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 22:29:13 ]
この間スペックが出たばかりなのに後始末って何するの?

282 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:06:44 ]
スペックが出ちゃえばあとは後始末だけだな

283 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:22:31 ]
Fortressの教科書書いてくれないのかな。

284 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:23:36 ]
>>280はオトコだが、>>279は根性無しの引きもりと言うことですね。


285 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:57:55 ]
>>284
顔真っ赤にして見苦しいよw



286 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 01:03:13 ]
>>283
Steele って教科書書いた事あるの?

287 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 01:19:35 ]
>>286
Cの本、Common Lispの本は?Javaのもあるし、もう1冊The High Performance Fortran Handbookもあるけど。
あと、本じゃないけどジャーゴンファイル。
PDFで結構いろいろなマニュアルも見つかる。
このスレでは "The History of Scheme" が有名かな。

絶対に外せないのがコレかな
ttp://dspace.mit.edu/bitstream/1721.1/5794/2/AIM-349.pdf

288 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 01:35:16 ]
サンクス。もっと入門的な書き物の事だと思ってた。
理論的なペーパーならここにあるのじゃダメかな。

research.sun.com/projects/plrg/Publications/index.html

289 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 01:50:15 ]
>>288
d。だめってことはないよ。こちらの勝手な希望なのでw
ttp://research.sun.com/projects/plrg/Publications/linuxMagazine.pdf
こんな感じで200〜400ページぐらいの分量があると全貌が見えるからいいかなと。
Guy Steeleはマニュアル書くと面白い例を出してくれるから期待したいな。
Cの本なんてすごく良かったのに和訳が絶版になって残念だなぁと思う。

290 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:55:58 ]
>>285が痛すぎる件について。

まぁ不問にしてやろうw


291 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 05:11:11 ]
くだらないやりとり引っ張る奴が一番見苦しい

292 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 09:08:32 ]
本当に「この話題を引っ張って欲しくない」人は、見苦しいとか煽って余計終わりにくくしたりしません。

ま、勢いで書き残しちゃった自分の痛いレスに触れて欲しくない>>285が、正論のフリして終結を促したものの、
自意識が邪魔してつい余計な「反撃」をしちゃって、終わらせることにも第三者のフリにも失敗、というとこでしょうかw

293 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 10:23:26 ]
>>286
ない。

294 名前:デフォルトの名無しさん [2008/06/03(火) 10:24:15 ]
AI MEMO は Lambda the Ultimate シリーズもだな

295 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 18:30:30 ]
ttp://library.readscheme.org/page1.html



296 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:31:19 ]
parser generator を探してみた。さすがは実験言語。ぞろぞろ出てきますw

ttp://www.iro.umontreal.ca/~boucherd/Lalr/documentation/lalr.html
ttp://www.informatik.uni-freiburg.de/proglang/software/essence/
ttp://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/scheme/code/parsing/taurus/0.html

297 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:35:32 ]
>>292
おまえ等クダスレ逝って喧嘩しろ。邪魔。

298 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:40:48 ]
>>296こんなのあるYO!
ttp://www.cs.indiana.edu/scheme-repository/code.lang.html

299 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:50:11 ]
>>296
エッセンスが好き。

300 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:03:09 ]
遺伝的プログラミング
ttp://codepad.org/bnZP9J3Y

301 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:07:21 ]
essenceってLL(1)のSLLGENと比べて敷居が高そうw
そんなこと無さ気に書いてあるけどさw

302 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:09:05 ]
>>298
激しくd。凄いね。

303 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:41:37 ]
>>301
使うの簡単だよ。
開発は大変だったろうけど。
汎用のパーザの部分計算でパーザを生成するから。

304 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:41:58 ]
>>300
なんじゃそりゃ!
(define (equ x) (* 2 (^ x 4)))
という式の微分を求めてるらしいけど。普通の記号処理と違うのに
(* 8 (^ x 3))
と同じ式がちゃんと求まってるw

305 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:14:37 ]
>>300,>>304
ttp://www.genetic-programming.org/gplittlelisp.html



306 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:17:13 ]
遺伝的プログラミングで最適化したコードを吐くパーザとかw

307 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:32:33 ]
essenceはScheme48用のpggというProgram Generator Generatorを使うのね。
作られたessenceはProgram Generatorなんだから、できたスキームはプログラムなわけ。
でもスキーム用のpggというProgram Generator Generatorを使うと・・・

308 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:55:01 ]
>>297
本当にそう思ってる人は、
(ごく一部の、目的の為に衝動を抑えるという人類なら大抵できることができないクズを除いて)
そういう喧嘩腰の追っ払い方を試みません。バレバレですw

309 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:56:11 ]
>>307
その再帰の不動点プログラムはいったいなんなんだ。

310 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:05:10 ]
遺伝的プログラミングで関数が収束しているのは一様収束?

311 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:10:05 ]
>>309
Schemeなんじゃないかな。

312 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:26:01 ]
初めてYコンビネータとかambとかGPを見たとき魔法を使ってるみたいだって思った。

313 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:08:36 ]
>>308
本当にそう思っている人も居るからそろそろ察してね。

314 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 17:58:16 ]
>>309
不動点として処理系を求めることなんてできるのかな?

>>310
世代を増やしてやれば一様収束に近いかな?
世代数より、使える要素の数に対する候補数や木構造の複雑さの許容範囲の方が
解に対して大きく影響を与えるようだよ。
その辺のパラメータを上手に与えないとGPが正しい解を返してくれない。
理論的なことはよくわからないんだけど。

315 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:28:22 ]
>>312
GPは未だに魔法みたいに見える
Yコンビネータとambは解説読むと目から鱗だった(ガッテンボタンいっぱい押す感じ)





316 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:56:57 ]

∩ヘ〜

317 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:07:13 ]
best score of generationが0.001以下なら安心できる解が得られてるというのを目安に使ってる。
理屈抜きにw

318 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:32:08 ]
ttp://codepad.org/P0lz91lS
この例だと3番目で0.001以下なので正しいと考える。
伊庭研HPにもそう書いてあるw

319 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:42:20 ]
試しにcos x の微分を解かせてみた。一発回答だった。スゲーw
ttp://codepad.org/1fI1ZtGU

320 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 02:17:01 ]
GPってなんすか?

321 名前:320 mailto:sage [2008/06/05(木) 02:18:48 ]
>>319を見て解決しました
> ; Genetic Programming with Scheme

322 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:19:19 ]
>>314
表示的意味論では、表示関数は不動点。

323 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:58:56 ]
GP=Graham,Paul

324 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:47:07 ]
Little Schemerって何が言いたいのかよくわからないところが多々あるのですが、
ものまね鳥やSICPやいろいろ読んだらありがたみがわかるようになるの?

325 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:51:54 ]
hogehoge schemerシリーズを買おうと思ったら
近くの本屋だとsicpとsimply schemeしか置いてねぇ・・・



326 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:54:50 ]
>>325
それだけ置いてありゃ立派なもんだよ

327 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 18:06:39 ]
>>325
都会はええのう。うちの近所じゃエクセル本しかないw

328 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 18:23:27 ]
>>324
シリーズ3冊読んで初めて意味がわかる。
微積とかの数学を知らない人向けのSICPだったのかと。
だから数学が得意な大学生は最初からSICPでいいと思う。
CSを専攻しようか迷ってるならシリーズ3冊を読んだ後ものまね鳥を読んでみると自分の適性が判断できるよ。

ありがたみっていう意味をどう使ってるかによるけど、CSとはどういうものかを知るという意味ではいい本。
何が言いたいのかわかるというのは、CSとはどんなことがらに興味の対象をもっている分野かを理解すること。
それがわからなくてもプログラムは作れる。
けど、バグが入りこまないような理論的裏づけとか、論理プログラミングが欲しいときがそのうちクルと思う。
そのときが来る前の先行投資と思えば安いもんだと思うよ。
悩んで考える時間は若いときにしか持ち得ないからガンガレ。


329 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:12:01 ]
javascriptしかいじったことのないゆとりがSICP読んでるんですけど、
schemeは無名関数内で再帰呼び出しって出来ないんですか?

lambdaの中でそのlambdaを呼び出すみたいな。

javascriptだと
(function(x){return (x)?x+arguments.callee(x-1):0; })(10);
とかやって使うやつなんですけど…

高階演算のとこで使いたいんですが、調べてもうまく見つからなかったです。



330 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:22:55 ]
>>329

(((lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))))
(lambda (func-arg)
(lambda (n)
(if (zero? n)
1
(* n (func-arg (- n 1)))))))
5)

Yコンビネータの雛形が内蔵されている階乗関数になってます。

331 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:23:00 ]
↑みたいなFAQネタ誰かまとめろ

332 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:29:38 ]
(((lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))))
(lambda (func-arg)
(lambda (l)
(if (null? l)
'no-list
(if (null? (cdr l))
(car l)
(max (car l) (func-arg (cdr l))))))))
'(4 5 6 3 4 8 6 2))

333 名前:329 mailto:sage [2008/06/05(木) 20:29:43 ]
>>330
どうも、ありがとうございます。
なにやら複雑ですね。

>>331
既出でしたか。失礼しましたー


334 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:34:32 ]
(define Y
(lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg)))))))

335 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:35:29 ]
>>330はこう書いてもよい。

(define F*
(lambda (func-arg)
(lambda (n)
(if (zero? n)
1
(* n (func-arg (- n 1)))))))

((Y F*) 5)



336 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:36:15 ]
>>332はこう書いてもよい。

(define M*
(lambda (func-arg)
(lambda (l)
(if (null? l)
'no-list
(if (null? (cdr l))
(car l)
(max (car l) (func-arg (cdr l))))))))

((Y M*) '(4 5 6 3 4 8 6 2))

337 名前:329 mailto:sage [2008/06/05(木) 20:42:03 ]
>>332
>>334
>>335
>>336

皆さんありがとうございます。なんかすみません。
どれも微妙に難しいコードですが、がんばって理解します。


338 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:15:18 ]
>>328
丁寧なレスありがとうございます。
multirember&coとかアッカーマン関数とか、totalとpartialがどうしたとか、
これらを導出する事で何を言いたかったのかが今ひとつピンときませんでした。
まあ、でも一応Seasonedまでは読もうかと思っています。

339 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 06:25:04 ]
>>328
> 微積とかの数学を知らない人向けのSICPだったのかと。
> だから数学が得意な大学生は最初からSICPでいいと思う。

これは嘘。目的が全然違う。

340 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:21:20 ]
>>339
どんな本ですか?

341 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 20:34:58 ]
SQL> SELECT COUNT(*) FROM SICPが好きな人;
----
  1

(,,゚∇゚) !!

342 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:23:17 ]
(define-syntax swap
(syntax-rules ()
((swap a b) (let ((tmp b))
(set! b a)
(set! a tmp)))))

(define-syntax display-line
(syntax-rules ()
((display-line x)
(begin
(display x)
(newline)))))


(define tmp 5)
(define other 6)

(swap tmp other)

(display-line tmp)
(display-line other)

343 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:35:26 ]
(define-syntax rotate
(syntax-rules ()
((rotate a) (void))
((rotate a b c ...) (begin
(swap a b)
(rotate b c ...)))))

(define x 1)
(define y 2)
(define z 3)
(define w 4)

(rotate x y z w)

(display-line x)
(display-line y)
(display-line z)
(display-line w)

344 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:37:26 ]
(define-syntax rotate2
(syntax-rules ()
((rotate2 a c ...)
(shift-to (c ... a) (a c ...)))))

(define-syntax shift-to
(syntax-rules ()
((shift-to (from0 from ...) (to0 to ...))
(let ((tmp from0))
(set! to from) ...
(set! to0 tmp)) )))


(rotate2 x y z w)

345 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:00:40 ]
(require (lib "time.ss" "srfi/19"))

(date->string (current-date) "~Y/~m/~d(~a) ~H:~M:~S")



346 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 02:08:30 ]
インデント付きで見る用のアンカー

>>342-345

347 名前:デフォルトの名無しさん [2008/06/07(土) 12:50:40 ]
誰か教えてくれ

学校の課題で困った

点(x,y) が 傾き a 、y切片が b である 直線 の 上部にあるか、 下部にあるかを 判断する updown? 定義せよ。

ただし、

上部にあるとき #t
下部にあるとき #f

を値として返すように せよ


348 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:56:50 ]
中学校からやり直せ

349 名前:347 mailto:sage [2008/06/07(土) 13:03:03 ]
>>348
それは一理ありますね

1次関数の勉強をしなおしてもみましたが、ダメでした

350 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:05:58 ]
>>347
ほらよ。そのまま提出しろよ
(define (updown? a b)
"直線上にあったら何を返せばいいんだよこんなクソ問題だすやつは死ね \
もちろん単位なんていらん")


351 名前:347 mailto:sage [2008/06/07(土) 13:12:11 ]
>>350
ストレートな回答ありがとうございます

私の説明不足です

直線上は考慮するなとのことでした



352 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:18:15 ]
こんな世界に生まれたことを呪いながら人生をリセットすべし

353 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:25:09 ]
>>351
直線上を考慮しないなんてありえない。一次関数の場合、端点が
常に極値になるのだから、直線上かどうかを調べるのは最も重要なことだ。
そんな教師はそちらから願い下げなさい。

354 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:44:58 ]
まずは「上部」と「下部」のテイギからはじめないとな。

355 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:21:14 ]
プログラムを組めないってんならまだしも、一次関数の定義がわからんてどういうことだ?
既知のxを使って算出できる一次関数の値と対象yの値を比べれば良いってアホでもわかりそうなものだが。




356 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:23:56 ]
傾きとか切片とかの意味が判ってないんじゃね?

357 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:25:29 ]
Schemeの課題ってことは大学生以上だと思うけど、一次関数がわからなくても
最近は大学に入れるんだなあ。日本って本当に滅亡にむかってるのだなあ・・しみじみ。

358 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:31:06 ]
大学の定員って志願者より多いらしいから誰でも入れるんじゃね?w

359 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:35:05 ]
>>354
それは、地図の上と下のテイギを決めるようなもんだw

360 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:37:27 ]
上下(じょうげ、うえした)とは、六方位(六方)の名称の一つで、高さ・深さを指す方位の総称。
一定方向に重力のある環境で、重力場の向かう方向、即ち物体が落ちる方向を下(した)、
その対蹠で物体が登る方向を上(うえ)という。
出典: フリー百科事典『ウィキペディア(Wikipedia)』

361 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:40:43 ]
>>357
中学校の総合の時間だったりしてw

>>351
直線の式にxの値を代入してyの値を比較すればわかるだろ

362 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:41:47 ]
地図の上下なら等高線で見て高いほうが上、低いほうが下ってことだな

363 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:44:27 ]
>>347
 class Point
  attr :x, :y
  def initialize(x, y)
  @x, @y = x, y
  end
 
  def updown?(a, b)
  (@y > a * @x + b) ? "#t" : "#f"
  end
 end
 
 a, b = 1, 5
 p = Point.new(1, 5)
 puts p.updown?(a, b)

364 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:47:30 ]
↑変な言語きたー!w

365 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:52:26 ]
>>363
ちょっと見ないうちにLISPも変わったな



366 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:52:44 ]
見た感じRuby?

367 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:59:39 ]
(define updown? (lambda (a . b) (lambda (x . y) (cond ((> y (let ((k x)) (+ b (* a k)))) a (define t #t) t) (else (not #t))))))
(display "こうですかわかりません")

368 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:30:01 ]
ルビーか。@ とか無けりゃ見やすそうなのになあ。惜しい言語だ。

369 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:53:13 ]
ぐはw
釣りだよ。久々にRuby厨降臨か。

370 名前:347 mailto:sage [2008/06/07(土) 18:18:41 ]
>>363
Ruby…うちの学校じゃやらないと思います

371 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:43:09 ]
予想以上に'end'がキモすぎる

372 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:45:04 ]
MatzLispがどうかしたか?

373 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:59:28 ]
>>14

374 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:01:04 ]
Ruby叩かれまくっててワロタ。
でも、Schemeで答え書いちゃったら>370の勉強にならんからな。つまらんし。

>>368
最近は継承の問題もあって、@使う人少ないよself.xとするのが主流
>>371
endぐらいなんだよ。お前なあ、fortran9xなんかend do/end if/end program
なんだぜ。それに比べりゃたかが三文字だし、
明示的にブロックの終わりを指定できてうれしいじゃん。

375 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:02:53 ]
>>374
>明示的にブロックの終わりを指定できてうれしいじゃん
GuidoLispに対する挑発行為ですねわかります



376 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:07:11 ]
>>374
あの syntax ならむしろ end class とかのほうが良かった。
なんかアンバランスな感じなんだよ。

377 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:09:09 ]
> 明示的にブロックの終わりを指定できてうれしいじゃん。
君は数式読み上げるときに「カッコ閉じる」って言って快感を得る人かな?

378 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:10:32 ]
endの対としてbeginがないのは確かに気持ち悪い
なくてもわかるけどさw

379 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:11:55 ]
class

ssalc
とか

それはそうとSchemeのbeginはなんとかしてほしい

380 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:16:22 ]
Ruby厨の弁解ウゼー

381 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:19:01 ]
>>378
Wirthキター

ってModula-*もないとこはないよな。> BEGIN

382 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:20:20 ]
Lispもcondの次の((いらねえんじゃね?

383 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:25:36 ]
>>382
Paul Graham乙


384 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:29:09 ]
>>377
>君は数式読み上げるときに「カッコ閉じる」って言って快感を得る人かな?
ハァ? 普通言うだろ。閉じカッコの位置が違ったら意味が変わっちゃうこと
もあるし。演算子優先順位の存在しないLisperはこれだから無頓着で困る。

385 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:30:27 ]
ちなみに、Emacsのruby-modeならendはC-cC-eで自動補完してくれるので
書き手が気にする必要はない・・・・ってなんかどっかで似たような話を
聞いたことがあるようなないような。



386 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:31:43 ]
「カッコ閉じる」は言うな。国家国家言う奴もいたけど。w

387 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:33:24 ]
インデントで優先順位を決めるSchemeの変種を考えるやつが居そう

388 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:35:24 ]
そろそろRuby厨KY

389 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:51:26 ]
>>384
> 演算子優先順位の存在しないLisperはこれだから無頓着で困る。

かなりハズしたねw
)ないと困るのはLispでも一緒

390 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:17:07 ]
演算子優先順位なんてまるで関係ないよなw

391 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:19:23 ]
どうやらrubyさんの思考もendのようですね

392 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:23:13 ]
そこでcommon lispのprognですよ

393 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:31:23 ]
progn = beginなら
prog0 = begi0?

394 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:16:36 ]
ANSI Common Ruby

395 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:43:44 ]
漏れの出た学科では「こっか」と読んだ。)。



396 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:51:06 ]
一呼吸置くだけで無問題。いちいちカッコトジルとか言わんでも分かるやろ。まさにKY

397 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:52:14 ]
オッカッ

398 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:52:14 ]
かっこ閉じるがデフォだったが
学校に1人はこっかと読ませる先生がいてだな

399 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:57:33 ]
こっか? シェルスクリプトみたいだよ
if ....

fi

case ....

esac

400 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:17:51 ]
こういうのはどうだろう?

( : かっ
) : っこ

( + 1 2 )
かっ プラ いち に っこ

401 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:30:58 ]
>>396
Haskellの$みたいなのならそれでもいいけど
全部一気に閉じない場合は?

402 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:39:25 ]
>>398
書籍にもあるから結構メジャーなんだと思ってるが。

403 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 04:32:00 ]
>>400
Dirac先生まで来た!

404 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 05:23:10 ]
竹内郁雄先生が「こっか」派だった気がする

405 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:41:42 ]
「ぱー」と「れん」だってJargonか何かにあったような



406 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 13:04:47 ]
Ex. This is Yet Another CPS. Explain it!

(define M
(lambda (f)
(lambda (ls)
(cond
((null? ls) '())
(else (cons (f (car ls)) ((M f) (cdr ls))))))))

(define (add1x) (+ 1 x))

((M add1) '(1 2 3)) ;=> '(2 3 4)

407 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 13:16:12 ]
本物のCPSならループの途中で脱出できるはずだ

408 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 13:19:46 ]
>>405
さすがに海外にはnerapと呼ぶ猛者はいないか。アーカードとかレッドラムみたいな。

409 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:07:48 ]
>>407
人生の敗北者

410 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 15:26:30 ]
何故そう思う?

411 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:32:49 ]
ErlangでConcurrent Scheme作った人挙手ノシ

412 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:35:11 ]
upyr

413 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 01:02:50 ]
>>406
あ、出典わかって納得w

414 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 03:00:01 ]
Gauche民もこのスレに集まるの?

415 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 07:00:06 ]
難民呼ばわりかよ



416 名前:デフォルトの名無しさん [2008/06/09(月) 22:34:40 ]
最近Schemeの勉強はじめたんすけど、再帰が全く理解できない・・・orz
誰か助けてー\(*_*)/

417 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:41:56 ]
再帰の何が理解できないんだてめえコラァ!

418 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:57:53 ]
hogehoge lisperシリーズの出番だな

419 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:09:27 ]
>>416
再帰ではなく、単なる手続き呼び出しだ、と思えば良い。
たまたま自分自身を呼んでいるだけ。

420 名前:デフォルトの名無しさん [2008/06/09(月) 23:12:26 ]
構造帰納法を思い出せばいい

421 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:12:46 ]
>>416
他言語で再帰を使った経験は?

422 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:47:57 ]
>>416
(ローカル)変数の寿命とスコープって聞いてスッと頭に入ってくる?
いや、COBOLer とかの、ローカル変数って概念がない人がいたりするので。


423 名前:デフォルトの名無しさん [2008/06/09(月) 23:52:45 ]
みんな親切で驚きました
もうちょっとがんばってみようと思います


424 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:07:26 ]
416の人気に嫉妬

425 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 19:59:03 ]
Gaucheのウィンドウズ版のバイナリって日本語使えない上に、
lambdaもちゃんと動作しないという認識であってますか?



426 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:01:32 ]
んなあほな

427 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:06:56 ]
いやマジっすマジっす
こんな感じで計算してくれない

gosh>(define test (lambda (a b) (*a b)))
gosh>test 1 5
1
5

428 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:20:12 ]
>>427
(test 1 5)


429 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:24:49 ]
これは流石にネタだろw

430 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:35:32 ]
僕もネタに一票w

431 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 20:35:44 ]
びっくりした

432 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:27:09 ]
(define test (lambda (a b) (*a b)))
test 1 5
=>
#<procedure:test>
1
5

433 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:27:49 ]
次は *a で引っかかるだろうな

434 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:36:34 ]
>>428さんの言うとおりやると

(define test (lambda (a b) (*a b)))
(test 1 5)
=>
reference to undefined identifier: *a

となってしまうでしょう。2段構えの手の込んだネタw

435 名前:427 mailto:sage [2008/06/10(火) 23:05:55 ]
あwwwwwwwwwwwwwwwww



436 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:17:47 ]
>>435
天然キャラ乙。

437 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:45:38 ]
日本語の方のネタもご披露を

438 名前:427 mailto:sage [2008/06/10(火) 23:50:19 ]
gosh> (print "hello")
#<undef>
gosh> (print "こんにちは")
*** READ-ERROR: Read error at "(stdin)":line 2: EOF encountered in a string lite
ral: "ツつアツ・
Stack Trace:
_______________________________________
gosh> *** ERROR: unbound variable: ツソツ
Stack Trace:
_______________________________________
gosh> *** READ-ERROR: Read error at "(stdin)":line 2: extra close parenthesis
Stack Trace:
_______________________________________
gosh>

439 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:52:37 ]
>>438
> gosh> (print "hello")
> #<undef>
> gosh>

ちょっと待て

440 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:07:52 ]
ごめん
1〜3行目はこうだったw

gosh> (print "hello")
hello
#<undef>


441 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:42:26 ]
Gaucheのネイティブコードと入力したエンコードを言ってみろ。

442 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:50:31 ]
そんなことが判るくらいなら悩まんだろw

443 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:56:14 ]
C:\>gosh -V
Gauche scheme interpreter, version 0.8.13 [utf-8]

入力したエンコードとは!?
コマンドプロンプトにもエンコードとか指定できるんですか
ちなみにテキストファイルにコード書いてShift_JISで保存・実行しても文字化けしました

444 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 01:25:28 ]
>C:\>gosh -V
>Gauche scheme interpreter, version 0.8.13 [utf-8]

>ちなみにテキストファイルにコード書いてShift_JISで保存・実行しても文字化けしました

>>[utf-8]

445 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 01:55:19 ]
>>444
UTF-8で保存してみたけどやっぱりダメでした

D:\>gosh test.scm
縺薙s縺ォ縺。縺ッ


あとコマンドプロンプトでそのままコード書いてもやっぱり文字化けですから
これは不具合というか実験中ということで未対応なんでしょうね



446 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 01:57:39 ]
ちがいます

447 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 02:07:37 ]
そうですか

448 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 02:27:03 ]
>>445
どのWindowsを使ってるかは知らないが、コマンドプロンプトで、
UTF-8でエンコードされた日本語が、正常に表示されると思った根拠は?

449 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 02:48:12 ]
>>445
コマンドプロンプトに、UTF-8でエンコードされた「こんにちは」を出力すると、
そう表示されるな。

(use gauche.charconv)
(print (ces-convert "こんにちは" 'utf-8 'sjis))

お前、ネイティブエンコーディングって何か理解してないだろ?

450 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:29:34 ]
あっ、なるほど
449さんのコードをUTF-8で保存し、実行すると正しく表示されました
Shift_JISで保存し、実行すると文字化けしました

コマンドプロンプトは基本Shift_JISってことですね
(ちなみにVistaもXPも同じ結果になるぽ)

ネイティブエンコーディングってググってもよくわからないですけど、
言語自体の基本となる文字コードのことでしょうか?
Gaucheの場合、UTF-8ですよね

コマンドプロンプトで直接コードを入力するとShift_JISのコードになってしまう
そのコードをGaucheがUTF-8で解釈して(この時点で文字化け)、
得た結果をさらにShift_JISとして出力されるから・・・・
わけわからないことになりますが・・・

451 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:33:43 ]
そこまで判ってて、なぜ「わけわからない」になるのか、わけわからないw

452 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:56:00 ]
>>450
理解したみたいなので、詳しくは書かないけど、
言語自体というか、処理系が内部で使う文字コードのこと。
Gaucheの場合、EUC-JPやUTF-8、ShiftJISなどから選べる。
それで、お前さんの使ってるGaucheはUTF-8でコンパイルされてる。

確かに、Windowsのコマンドプロンプトから使うには不便だろうな。
configureに--enable-multibyte=sjisを指定してコンパイルし直すか、
Emacs経由で使った方がいいと思うぞ。

ttp://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aGauchebox

453 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 08:43:32 ]
>>452
UTF-8でビルドした犯人は俺だ。
でもShift_JISでビルドしたものを配布すると他国の人が困るんじゃないかな。
それともGauche-mingw-0.8.13-sjis.exe とかを作る?

454 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 08:44:57 ]
>>451
毒を出しすぎ。

455 名前:UTF‐8はXML標準…でも日本語「だけ」苦手?(ТΤ mailto:sage [2008/06/11(水) 10:18:00 ]
LISPをざっとみた感想です;

「直感的には」わかりにくかったけれど、
「印欧語話者の生成文法で言う言語本能って
 だいたいこんな感じなんじゃないか?」と思った。
(英語で隠れてるが、ドイツ語は剥き出し?)
→この「発想パターン」は何度でも「来る」。

私は参照(接続/冠詞)型主語言語話者でなくて
近傍(焦点‐集合操作)型主語言語(日本語)話者w
集合操作による構文は経路‐直線的間接参照端点:
 「静的・直線的な論理」:印欧語族の構文法とは違う。
(ドジスンの指摘したとおり論理対象空間は本来動的で、
 各所で前提が違う方が普通だから、直線化は不可能。)

=英語的言語感覚でなら「直感的に使える優秀な言語」。

英語(印欧語)センスを鍛えようw ゎぁぃ モレオワタ(AA略)



456 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 11:30:34 ]
個人的には、Lispは「言語」ではないと思ってる。
図形、地図、表、レゴブロック、そういったもの達のほうにずっと近い。

だから>>455を読んで、日本語の話者だから戸惑うのではなく、
言語に触れるモードで触れるから戸惑うのではないか、みたいなことを感じた。

457 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 11:52:23 ]
黒板に自然法則とか書く時はそれでいい
プログラマの意図が分かるように書きたいときは、言語っぽくないと困る

458 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:09:57 ]
>>455
日本語もまともに書けないのはよくわかった。

459 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:50:18 ]
>>458
自分の読解力のなさを棚にあげるのはやめようぜ

460 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:56:30 ]
>>455
そんじゃ、印欧語話者の間でPy(ピー)が人気なのは何で?素朴な疑問〜


461 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:03:57 ]
というか、国際的にもLisp/Schemeは日本では大人気。

462 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:04:09 ]
>>469
ほう、なら455を日本語で説明してくれんか?
3行目から出てくる括弧の使い方から。
特攻の拓みたいに特殊な言語かと思ったよ。

463 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:04:37 ]
ごめん459だった。

464 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:14:22 ]
「直感的には」わかりにくかったけれど、
→ 直感的には判りにくいけれど、
「印欧語話者の生成文法で言う言語本能ってだいたいこんな感じなんじゃないか?」と思った。
→ 印欧語話者の生成文法で言う「言語本能」って、大体こんな感じなんじゃないか?と思った。


465 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:54:50 ]
>>453
Windowsのことはよく知らないんだけど、入出力コードはカレントロケールに合わせる
みたいなことって難しいの?



466 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:56:52 ]
>>459
俺も>>455が何を言いたいのか理解できなかった。
読解力無いのかなあ。

467 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:05:44 ]
>>464
5行目以降もまるで判らんので、その調子で翻訳お願いしますね。>459
こんな物を読解する能力なら不要だと確信してるけど、
>>456でいきなり会話が成立した(らしい)事が、本当に不思議でしょうがない。


468 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:08:50 ]
LISP使いはスノッブが多いな
GEBとかメタマジックゲーム読んで悦に入ってそう

469 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:23:47 ]
コンプレクッスですか

470 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:24:44 ]
>>455が理解できない一人でーす。

>>461
「国際的にも」「日本では」
国際的なのか、日本だけなのか、はっきりしる!
…みたいな日本語の乱れについての話題なのかな?今は。
外国人が一生懸命コミュニケーションしようとする試み
なのかもしれないけど、漢字ひらがな並べれば良い、って物じゃないんです。
半端に学ばれたままだと相手を不愉快にさせますよ。

471 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:32:23 ]
2ちゃんの定型文だけはしっかり使うガイジンかよw
字は読めないけど日本のマンガには詳しい、みたいな。

472 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:43:03 ]
いまのとこ一方的に文章吐き出す機能しかないみたいだから
受け答えは期待出来ないと思う

473 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:34:47 ]
>>465
このへんに問題点が書かれている。
practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aWindows%2fVC%2b%2b%3alog%3aold_2007#H-1ctgw0n
これはVC++の話だけどMinGWも同様と思われる。


474 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:37:14 ]
>>462
俺も理解できないんだが、
>>456が回答してるんだから
理解できる文章なんだろ。
俺たちが読解力不足ってだけで。
と思っただけ。

475 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:40:11 ]
文章を理解したのではなく、その他の能力(ESPなど)を用いたのではないかと思う



476 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:06:49 ]
文章はともかく言葉の意味がわからない
言語学用語なのかな?
あるいはLispを齧ったばかりの455さんが戯れに組んだELIZAじゃないだろうなw

477 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:08:45 ]
455、人気者だなw

478 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:19:09 ]
>>450
MS-Windows使わない人なんでハズしている可能性あるが…

この端末エミュレータで解決できんかね?
実行するコマンドの文字コード指定できるみたいだが。
ja.poderosa.org/

Win32のコンソールAPIは最低限の依存で済ませているみたい。
Gaucheもそうだろうから、利用できるんじゃないか。

479 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:02:49 ]
Lispは素晴らしい言語だと思うのですが
Lispが生き残ってるのはEmacsのおかげ
実用には耐えないが一部ハッカーの趣味で使われている
など否定的な意見のみが見られてイマイチ本気になれません
Lispで作られたアプリケーションを教えていただけないでしょうか

480 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:05:39 ]
マルチかよ

481 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:08:28 ]
これは酷い

482 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:29:13 ]
>>455-479の人気に嫉妬


483 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:30:39 ]
【入門】Common Lisp その4【質問よろず】
pc11.2ch.net/test/read.cgi/tech/1201402366/860

860 名前:入ってしまえば天国なんだね…。[sage] 投稿日:2008/06/11(水) 11:01:38
LISPに最初から挫折しそうになって、あちこち見ています。

使用者例が少なすぎて発想パターンを断言できないけど、
思考‐発想タイミングから言えば基本的に敷居「だけ」が
高い言語のようだし、初心者を甘やかしても良さそう。

ところで、この言語で言えば印欧語族のロシア語みたいな
性格を見て今、ぐぐってみたんだが…ちょw大当たりww
これは…すごいのはキャラが立ってるLISPだなwww

これが、印欧語族の中では英語的なC言語系だと…
ぐぐってみた…ごめん、もう何も言う事ないwwww
(英語は「敬語」を始め、高度習得が困難です。)

対照的すぐる…(もうちょいがんばれば、あるいは…?



484 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:30:42 ]
>>479
無理して本気になる必要ないよ。
好きなことだけ本気でやればいい。
仕事なら話は別だけどね。

485 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:33:54 ]
>>474
おいおい、弁解するのはかまわないけど、
勝手に「俺たち」で括るのはやめてくれよ。
お前みたいな言う事がコロコロ変わる幼稚な奴と
一緒にされたら気分悪いだろ。




486 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:36:15 ]
ブログペットやマルチにいちいちマジレスする必要もないと思うんだ。(´・ω・`)

487 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:04:32 ]
>>479
これはひどいww

488 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:41:12 ]
>>485
必死すぎw

489 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:57:30 ]
>>488
必死だから何だ?
マジで気持ち悪いからな。お前も含めて。
書き逃げばっかりしてないで意見があるなら書けよ。

490 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:32:58 ]
www.inf.hs-zigr.de/~wagenkn/PP-Buch/

#!C:/Programme/PLT/mzscheme -r

(require (lib "cgi.ss" "net"))

(display "content-type: text/html") (newline)
(newline)

(display "<HTML>")(newline)

(display "<HEAD><TITLE>cgi-script's response</TITLE></HEAD>")(newline)

(display "<BODY>")(newline)

(display "Hello, I'm Mr. ")
(display (extract-binding/single 'surname (get-bindings)))
(display ". <BR>")(newline)
(display "Just call me ")(display (extract-binding/single "firstname" (get-bindings)))
(display ". <BR>")(newline)

(display "</BODY>")(newline)

(display "</HTML>")(newline)

491 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:55:25 ]
(define λlambda)

492 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:51:48 ]
lambdaは構文だからdefine-syntaxやdefine-macroにしたほうがポータブル

493 名前:デフォルトの名無しさん [2008/06/12(木) 01:55:43 ]
scheme初心者なんだけどほんとに再帰って難しい
入門書読んでて再帰の便利さはなんとなく伝わったけど・・・

やっぱ上級者になると普通に使えるんですよね
俺ってやっぱりダメな子・・・

         |        |/(-_-)\|
          |        |  ∩ ∩   |
          |           ̄ ̄ ̄ ̄ ̄
        :::, ―――、
       ::::/./^^^^^^'vl
     :::::::| | /  \ ||
      :::::::(sl rェ , rェ |') ウツダ
      :::::゙ゝ、 -  ノ
     :::::/ l  ̄ ̄lヽ
     :::::|-|/l⌒l⌒l-|
     :::::\二、_)二ノ _____________
      :::::|||  |:|  |
      /`ー(⌒)(⌒)
     /;;;;;;;;;;;;;;;; ̄;;;;; ̄
   /
 /



494 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:10:18 ]
>493
昔むかし、Pascalの授業の宿題で再帰を使わないと事実上解けない問題を
「再帰呼び出しと言うものを全く知らずに」何とか解こうと悪戦苦闘した
俺よりはマシw。

495 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:14:54 ]
ちなみにその教科書にはその問題が記述されている箇所以前に
再帰呼び出しを説明している部分がほとんど無かった。

今なら考えられない教科書だと思う。



496 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:19:25 ]
極めて教育的な良い教科書だな

497 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:22:45 ]
一行一行その時の値がいくつになるか紙に書いてみたらわかると思う

498 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:23:14 ]
「再帰」という単語をほとんど使わずに
それを記憶に焼き付けさせたのか

499 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:32:13 ]
さらにちなみに俺の場合(Pascalでの再帰の場合)は
見かけ上、同じ名前の変数や関数でもシンタックス(戻り番地など)と
共にスタック上に別もの扱いで次々と積まれて行く事が分かって
ようやく納得が行ったよ。

そこに気づくまでは訳が分からなかった。

500 名前:デフォルトの名無しさん [2008/06/12(木) 02:33:08 ]
ゲームコンテストに出しなさい。
www.tohofuhai.com/  豆腐ゲームコンテスト
kirara111.sakura.ne.jp/  星屑きらら杯
3punge.com/ 3分ゲーコンテスト(今休止中)



501 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:55:49 ]
>>494
昔pascalとくれば東大の学生だったんだな。

502 名前:デフォルトの名無しさん [2008/06/12(木) 03:30:00 ]
Eclipse3.3+Cups使っている人いる?
なんか環境自体が、うまく動いていないような気がするのだが・・・

503 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 03:48:30 ]
再起で解け、ループで解けない問題はない。

504 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:16:06 ]
それは「問題」という言葉の意味を取り違えてるのでは。
>>494の思い出話に出てくる「問題」は、あくまで宿題なわけで。
たとえば身も蓋も無い例をいえば、「ただし、ループを使ってはいけない」と書かれた「問題」は、
再帰で解けてもループでは解けないよ。

505 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 08:09:22 ]
>>494 >>499
Pascalの機能として知らなかったのなら話はわかるが、
再帰の概念がわからなかったっていうのは・・・
高校の数学をさぼってたと考えられる。



506 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:30:12 ]
再帰じゃないと解けない問題なんてあるのか?
「再帰を使用せよ」と指定されてないかぎり、なんでもif/gotoで書き直せる
はずなんだが。

507 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:49:54 ]
例:「再帰を使用せよ」って指定された問題

508 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:59:14 ]
Schemeの末尾再帰はむしろgotoに近い機能ですよ
Schemerはgotoを嫌っているわけではないと思います

509 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:26:12 ]
ackermann関数を再帰なしで

510 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:31:17 ]
現在の有限の記憶域の計算機で計算できるものは再帰なしで計算できる。
配列をスタックと看做してループすれば再帰と等価。
たぶん。
無限の記憶域の場合は等価かどうかはわからない。

511 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:44:03 ]
gogo ackermann!!

512 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:21:09 ]
>>510
>配列をスタックと看做してループすれば再帰と等価
それじゃ関数の呼び出し部分を自分で作ってるのと同じじゃないか?

513 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:35:21 ]
>>510 たらい回し関数ってループに展開可能かい?


514 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 12:01:04 ]
>>512
そう。
端的に言えば再帰を使わずに仮想機械を組む。
その中で仮想言語で再帰的プログラムを組む。
表層言語には再帰は現れず、
データ(仮想言語)に再帰が現れるだけ。
CPUは再帰的ではなく反復的に計算するけど
再帰計算ができるでしょ?
それをソフトウェアでするだけのこと。
再帰的なデータも許さないとなれば
再帰的アルゴリズムが表現できず
チューリング完全でなくなる。

515 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 12:01:43 ]
Ackもtaraiも可能です。
>>510
無限記憶領域でも等価です。

詳しくは計算理論の入門書で。



516 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:17:31 ]
>>493
上級者になると、ていうより基礎中の基礎。
ドラゴンボールで言えば舞空術。
囲碁で言えばシチョウ。
でもあのポール・グレアムでさえ
プログラムを習いたての頃は反復アルゴリズムしか知らず
再帰を使いたいなどと考えたことはなかったし
(Ansi Common Lisp)
19歳の時には
「たぶんLispを学ぶべきなんだろう。しかしLispはあまりに異質に見える。」
(Lispがそんなにすごいなら ---If Lisp Is So Great---)
などと考えてたんだから
頑張れ!

517 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:17:52 ]
>>503
あたりまえじゃないか。もちろん逆も真。

518 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:30:10 ]
有名な再帰画像

Drosteココア
en.wikipedia.org/wiki/Image:Droste.jpg
メリーミルク
mognavi.jp/image/food/00/01/51/4902705021471.jpg

519 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:34:59 ]
>>493の書き込みを見て、ふと思った。
再帰を見て、わざわざこんなことしなくても・・・と思ってしまう問題が多い。
たまに再帰があって良かったなと思う程度。
僕は、きっとLispに向いてない。


ちなみに、ほとんどLispはできません。

520 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:51:53 ]
>>519だが、連投すまん。
この質問に的確に答えてくれる人がいたら、
みんなの(僕の)ためになるんじゃないかと思って。

たとえば、再帰を使うめっちゃ初歩的な関数lengthがあるよね

(defun length (lst)
(if (null lst)
0
(+ 1 (length (cdr lst)))))

再帰がわからない人って、読むときにlengthって関数の
意味が知りたいのに(わかってないのに)、lengthを使われても
わかるわけないじゃんってことじゃない?

521 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:55:28 ]
その辺について、ANSI Common Lispで言ってたね。
以下、それを引用しているページから引用。

初めのうちは再帰は理解するのが難しいと思う人が多い。
難しいと思ってしまうのは、主に関数に対して誤ったメタファ(比喩)をあてはめていることによる。
人々は関数をマシンの一種ととらえがちである。
原料がパラメータで届き、ほかの関数に下請けに出して処理し、最後に完成品を組み立てて、返り値として出荷する。
関数に対してこのメタファをもっていると、再帰は不可能ということになる。
マシンがどうやって作業を自分自身に下請けに出すのか?
動作中のマシンにはそんな余裕などないじゃないかと思ってしまうことになる。

関数は進行しつつあるプロセスであると見る方が、メタファとしては適当であろう。
再帰はプロセスの中では自然なものである。日常生活でも再帰的なプロセスをよく見る。
たとえば、ヨーロッパ史における人口変化に関心をもっている歴史家を考えてみよう。
資料を調べるプロセスは以下のようなものだろう。

1. 1 つの資料を手に入れる
2. 人口変化に関する情報を探す
3. その資料がほかの役立ちそうな資料に言及していたら、ほかの資料を調べる

このプロセスは理解しやすいものだが、第 3 ステップにより同じプロセスが何度か適用されることがあるので、
再帰的なプロセスになっている。

522 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:00:20 ]
>>520
なるほど、そういう風に悩むのか。

まず、lengthの中のlengthが使われるのはnullでないときだけ、
つまり () に対する length の値は length を使わずに 0 と決まっている。
で、それ以外については length を使うわけだが、だんだん短くなっていつかは 0 が返る。

という具合にステップバイステップで考えていくと判りやすいんじゃないかな。

523 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:02:50 ]
文系の奴は頭だけで理解しようとするからイカン
グダグダ言ってないで手も動かせ

そう言っていた数学の先生がいたとかいないとか
The Little Schemerなんかもそのクチか

524 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:05:57 ]
でもまぁ実際には、理系にとっても「体感」というのは大事だよな。

525 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:20:38 ]
数学的直観って言葉があるくらいだからね。

自分は数列、漸化式が得意で好きだったから、
再帰は何も悩む所がなかった。

実装手法もPコードですぐに理解できた。(東大ではありません>>501)
浮動点による意味づけを知った時には、
漸化式みたいでわくわくした。




526 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:43:07 ]
>>521
名文をありがとう。

>>522
う〜ん、自分流に噛み砕くと、
(1)停止することを確認
(2)cdr部分を取って、空リストになるまでは1足し続ける(lengthの場合)
ってことですかね。

>>525
うらやましい。

527 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:00:29 ]
部分問題に分けて、(car, cdr)
部分問題毎に適切な処理、(1, length)
部分問題の解を統合。(+)
部分問題の収束地点の設定。(null, 0)

分割統治法の一番極端な形、一要素とそれ以外に分ける。
後は下請け(再帰的関数呼出し)に任せる

528 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:27:08 ]
いちいちcarとかcdrみたいな「処理」で取り出させるのが前時代的なんだよなー
LISt Processorなのにパターンマッチが標準で無いってどういうことよ

529 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:28:49 ]
>>528
簡単に作れるからでは?

530 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:31:19 ]
>>529
簡単に作れるものほど言語が準備すべきだと俺は思う。
そうでないと人によってそれぞれの実装ができてしまって
言語の「中に」バベルの塔ができちゃうからね(実際Lispはそうなっちゃってるのでは?)

531 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:35:42 ]
パターンマッチこそが言語内言語なんだよね。
汎用のパターンマッチを使うよりも効率的な専用マッチャーが簡単に書けるから、
必要性が低いのだ。正規表現があまり使われないのも、だいたい同じ理由だ。

532 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:40:44 ]
処理系毎の拡張で用意されてるでしょ

533 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:43:07 ]
汎用のPrologインタプリタでさえ、Lispなら100行くらいで書けるからなあ。

534 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:44:27 ]
>>528
君の考える「パターンマッチ」の具体的な仕様と使用例を示してくれると、
より有意義な議論ができると思う。

535 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:51:19 ]
パターンマッチって分岐と分解を同時に行う処理だと思ってる
大抵は分岐の内容に応じてリストを分解するから一度に処理するのは適切な抽象化なはず
下にリストの内容を1だったら2、2だったら5、それ以外だったらそのままにして変換する関数を
書いてみたがどうみてもパターンマッチ版の方がわかりやすい(どうやってパターンマッチを実装するのかは
しらないけど。あとmap使えというのは禁句)
みんなのLispプログラムもみなおしてみたらパターンマッチを使った方がスッキリする部分が多くあるのでは?
このスレにもパターンマッチを「ふわふわしたおまけ」としかみなしてない人が結構多いと思うから
俺のレスがパターンマッチを使うきっかけになってくれれば幸いだ。


(defun (hoge lst)
(cond ((eq (car lst) 1)
(cons 2 (hoge (cdr lst))))
((eq (car lst) 2)
(cons 5 (hoge (cdr lst))))
((and (not (null? lst)) (list? lst))
(cons (car lst) (hoge (cdr lst))))
(else
nil)))

(defun (hoge lst)
(pm lst
((| 1 xr)
(cons 2 (hoge xr)))
((| 2 xr)
(cons 5 (hoge xr)))
((| x xr)
(cons x (hoge xr)))
(else
nil)))



536 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:59:53 ]
>>535
後者が簡潔だが、前者が判りやすい。おそらく効率は前者が勝る。
「ふわふわしたおまけ」とは思わないけど、言語の中に別の言語を導入するような
気持ち悪さは感じる。

まあ好きな人は使えば良いのでは?という程度かなあ。

537 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:20:59 ]
>>535
CL?Scheme?

538 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:27:26 ]
俺パターンマッチ入りの俺Lisp言語だろw

539 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:20:34 ]
パターンマッチはなじむと便利
可読性とかは知らんけど

540 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:22:11 ]
まあ関数型言語だとおなじみ

541 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:25:28 ]
頑張れば CLtL3 に入れてもらえるかもw

542 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:28:51 ]
535のプログラムみて思ったんだけど
Listだけどnilじゃないのを一発で判別する関数ってないんかね

543 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:05:06 ]
consp
pair?

544 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:41:28 ]
来月「Practical Common Lisp」の訳書が出るっぽい
www.bk1.jp/product/02997001

545 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:47:48 ]
>>544
原著よりも安いのか。
園城さんって、LispUser.netの人ですね。



546 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:54:10 ]
>>543
「List」だけどnilじゃない

547 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:37:44 ]
>>528
いろいろな人が考えたけど、
S式とうまくマッチするのがないってのが現状。
これだけ時間がかかって見つからないからないんだと思う。

define-syntaxは一部カバーしていると思うが。

548 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:57:14 ]
CLOSがパターンマッチみたいなものだと思うのですが

549 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:32:04 ]
>>547
昔から、
(match '(a b . c) '(1 2 3 4 5)) =>((a 1) (b 2) (c (3 4 5)))
(match-let (a b . c) '(1 2 3 4 5) (list a b c)) =>(1 2 (3 4 5))
みたいなのや、prologのunification辺りはほとんどの人間が
自分の物を持ってると思うけどな。
こういうのをマクロにしてパターンを定数で取れば特殊化もできる。
今は組み込みにするのが流行だろうけど、
LISP系ならパターンマッチはライブラリで自然に実装できる範囲だから、
あえて入れなかったのでは。

550 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:39:31 ]
>>546
nilは「List」だけど。
おまいのListの定義がおかしいだけ。

素人増えましたな。

551 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:46:00 ]
Listだけどnilじゃないのを一発で判別する関数
(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))
が組み込みであるか?てことでしょ。
これはSchemeのコードだけど。
コンスとリストを混同してるのでは?

552 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:55:31 ]
(and (consp x) (listp x))を一発で判別したい

conspだけでいいのでは

よくない

?←今このへん

553 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:56:48 ]
自分で述語用意すればいいじゃん・・。


554 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:04:15 ]
点対神経症だろw

555 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:07:37 ]
CLの listp (点対でも真)とSchemeの list? (点対だと偽)の差が混乱を招いているのでは?



556 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:25:34 ]
>>535みたいなどこかの俺言語で育っちゃった人は
一度まじめにどっちかで矯正した方がいいよ。


557 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:34:25 ]
狼に拾われたがパンダに育てられて観賞用に


558 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:00:34 ]
どっかってどこ?
MITとかUCBあたり??

559 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:02:26 ]
このスレとかでいいんじゃね?w

560 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:07:30 ]
535の脳内のどこか

561 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:30:21 ]
>>556
これから独学でLisp習おうと思ってる。
今までプログラミング言語を真っ当に習ったことはなくUNIXのBシェルスクリプトが
ちょっと使えるくらい。

こんな自分が、あとから矯正の必要がないように正しく学ぶためにはどうすればいいですか?


562 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:35:00 ]
>>561
訳書は見てないけど >>544 なんて良いんじゃないかな。
実用的な例題で勉強できるから飽きないと思うよ。

563 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:37:43 ]
>>561
わたしゃ独学でCLを学んでたけど、
定番の本だけはきっちり抑えておくとそこから、書き方を学ぶことができるよ。
もちろん、本に載ってなくって、知っておいたほうがよい方法やスキルというのも
あるけど、それは実際に勉強会などを通じて人とのコミュニケーションをとっていく
事からだと思うな。

別に俺様言語でもいいけどさ。矯正は必要な場合はあるけど、実際に回りにschemer
がいるかといえば別の問題があるからね。その点は指摘してる>>556というのは
恵まれた環境を持っているといえるね。最近はハブサイトもできつつあるから、
独学者にとってもよい時代がくると思うよ。shiroさんのサイトみたいに人が集まってるとこ
ろは自分から積極的に恵まれた環境を作るきっかけにはなるよ。



564 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:40:26 ]
定番ってのは、ANSI Common LispやPractical Common Lisp, PAIPあたりだけど。
オンラインのみで流れているスタイルに対してのよいドキュメントは
先日g000001さんたちがやっていたNorvig and Pitman 1993 (和訳あり)をよんで
みればいい。

565 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:48:07 ]
www010.upp.so-net.ne.jp/okshirai/tutorial-on-good-lisp-programming-style-ja.txt

これね。これはcommon lispの師匠に進められた文章でもあります。テンプレに含めて
もいいと思う。



566 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:51:18 ]
>>544
ktkr

567 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:33:49 ]
>>562-565
thx!

568 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:37:36 ]
>>565
その文章はとてもいいよね。
でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

569 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:50:06 ]
>>568
> でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

たしかにみたことがない。 あまりないのはしかたがないかも。
typecaseで場合分けすることや型宣言前提だろうし。


570 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:55:21 ]
俺は情報隠蔽はpackage, CLOSの仕事と割り切ってる。
だから使ったことない。> deftype


571 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:24:51 ]
>>570
微妙にわかるような、わからないような…。
でも、棲み分けだよね。

572 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:00:48 ]
>>565
この文章は俺もよく参考にさせてもらいました。ちなみに原文(英語)はこちら。
www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf

573 名前:546=551 mailto:sage [2008/06/13(金) 23:36:37 ]
>>555
なるほど。私が不勉強でした。
>>550
失礼しました。

574 名前:デフォルトの名無しさん [2008/06/13(金) 23:57:48 ]
で、結局Cuspは使えるのか?!


575 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:09:21 ]
こういうこと?

(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f



576 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:14:50 ]
(list? '(1 2)) ;=> #t


(listp '(1 2)) ;=> #t

577 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 05:38:16 ]
まだ理解できてないじゃん
最初からおさらいしたら?

578 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:07:37 ]
(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t
(list? '(1 2)) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f
(listp '(1 2)) ;=> #t

(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))

(non-nil-list? '(1 . 2)) ;=> #f
(non-nil-list? '()) ;=> #f
(non-nil-list? '(1 2)) ;=> #t

579 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:20:00 ]
(define (nil-list? x)
 (not (non-nil-list? x)))

(nil-list? '(1 . 2)) ;=> #f
(nil-list? '()) ;=> #f
(nil-list? '(1 2)) ;=> #t

580 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:21:54 ]
間違えた>>579

(nil-list? '(1 . 2)) ;=> #t
(nil-list? '()) ;=> #t t
(nil-list? '(1 2)) ;=> #f

581 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:11:14 ]
DrScheme ver.4.0キタワ

582 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:24:12 ]
plt-scheme.org/tour.html

583 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:58:53 ]
>>578-580
いちいち無意味なもん貼るな。
自由帳はこちら。>>8



584 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:06:37 ]
>>583
初心者に向かって「いちいち」とか書き込んでるオマエの方が「いちいち」ウザイw

585 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:07:38 ]
初心者は放って置けば消えていくJK。



586 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:21:11 ]
「On Lisp」の「第16章 マクロを定義するマクロ」スゲー

587 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:49:14 ]
>>586
その気になれば作れるようになるよ。:-)

588 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:10:43 ]
>>265のambをlet-syntaxするマクロを書いたら、`...' が衝突した
codepad.org/FhFcRNhU

こうですか?わかりません!
codepad.org/DOhmrD4x

589 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:53:50 ]
>>588
codepad.org/DsQGNTC2

590 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:20:05 ]
>>589
おお
PLTの拡張かと思ったがR6RSに書いてあった。thx

591 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:33:58 ]
【産学連携】京大と日本IBM、大規模交通社会シミュレーションシステムを開発[08/06/11]
news24.2ch.net/test/read.cgi/bizplus/1213353215/
ttp://pc.watch.impress.co.jp/docs/2008/0611/ibm.htm

このシステムで使われてるシナリオ記述言語Qの説明を見ると、Dr.Scheme版が有る。
ttp://www.ai.soc.i.kyoto-u.ac.jp/Q/system_j.htm


592 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:34:24 ]
Dr.Scheme ver.4.0ってset-cdr!が使えないの?

593 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:12:54 ]
>>592
ver372までset-cdr!が使える。
pre399ぐらいでは使えなくなってた。ver4.0は400に相当してるはずで使えないと思う。
正直、不便になった。

594 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:29:46 ]
ということは、実装によってはlist?を定数時間で計算できるな

595 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:10:36 ]
処理系依存の話題で恐縮ですが、Gaucheのオブジェクトシステムについてお聞きしたいです。
スレ違い、または既出だったら申し訳ないです。

用件を言うと、Gaucheのオブジェクトシステムで
スロットに対するアクセス制御は困難でしょうか?
(アクセス制御: C++, Java等にある private / public 的な機構)

現在、「プログラミングGauche」17章のオブジェクトシステムのあたりを読んでます。
自分は、Java->Ruby->(Haskell)->Scheme
とやってきたので、どうもJava的なOOの発想があるようです。
せっかくオブジェクトシステムがあるのだから、
活用しようと思っているのですが、スロットのアクセス制御が無いと不安に思います。
method内だけ参照や変更を許すようなclassを定義したいなぁと思ったのが事の発端です。

「Gauche:スロットアクセス」で検索して出てくるページが参考になったのですが、
マクロとメタオブジェクトプロトコルを駆使してました。

やはり総称関数という機構を取り入れている以上、
単純にスロットをカプセル化はできないですかね?
長文すみませんでした。




596 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:13:54 ]
いわゆるメソッドと違って、総称関数は特定のクラスの所有物じゃないからねえ。
とりあえず、その辺を管理する(指定する)仕掛けがいるわなあ。

597 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:14:38 ]
真面目な長文かけるならこんなゴミ溜めじゃなくてWilikiにでもかきなよ


598 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:18:57 ]
>>595
アクセスコントロールはないです。

599 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:10:07 ]
整備兵 『80%?冗談じゃありません!現状でジオングの性能は100%出せます!!』
シャア  『脚は着いていない』
整備兵 『あんなの飾りです。偉い人にはそれが分からんのですよ!』

600 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:29:04 ]
javaやC++と同じにしたいなら、同じ機構を用意すればいい。
wilikiの連中は、既存のシステムしか使わずに実行時に何かやろうとしてる。
おかしな事になるのは当然。こんなのと付き合う必要はない。
>>595を含め大抵の奴はCLOSモドキなんて望んでない。
javaやC++でコンパイル後に何の情報が残るか考えれば判るはず。
さあ、やるんだ。

601 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:35:07 ]
>>599
元ネタってガンダムなの!?

602 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:47:35 ]
>>600
こうして、アプリケーションと同じ数だけのフレームワークが発明されるのであった。w
(批判ではない。むしろこのあたりがLispの良さであろう。)

603 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 04:07:38 ]
資産の積み重ねができないわけですね
これも数十年経ってもメジャーになれない理由の一つなのかな?

604 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 04:15:06 ]
ANSIに規格がある言語はマイナーとは言えないだろう

605 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 05:03:15 ]
>>595
CLOS系は「そういうもの(アクセス制御は気にしない)」だと思うのが吉。
文化の違い。
隠蔽したいなら、クロージャベースのオブジェクトシステムの方がいいんじゃないかな。




606 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 07:10:05 ]
>>595
CLOSって、Java/C++系とは文化が違いすぎて、private/public/protectの区別がなくても
さほど問題がないよ。この辺は>>605さんの意見とかぶるね。

あの系統のオブジェクトシステムを作るなら、別に作成したほうがいいけど、できればCLOS
の方を利用するように頭の発想を切り替えたほうがいいよ。CLOSのほうが柔軟な制御が
できるのでね。

607 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:00:04 ]
オブジェクトが必ずその名前のスロットを持っているとassertできる状況なら、
それを隠蔽する必要があるとは思えない。

608 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:16:27 ]
CLOS使えだなんて口が裂けても言えん。

609 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:02:11 ]
CLOSは、例えばアクセスコントロールを持つような
別の標準オブジェクトシステムのカーネルになるための
基本オブジェクトシステムとして考案されたが、
いつの間にか標準のオブジェクトシステムの座に着いている。

なんだ使ってみればCLOSのままでええやんってところか。

610 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:06:40 ]
そこでFlavorsですよ。

611 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:27:16 ]
>>609
この辺の事情はbit別冊のCLOS本に書いてある。
たしか井田さんがMLでの議論をまとめてる。

既存のCommonLoopsかFlovorsのどちらの流儀にするか揉めているところに、
汎用のカーネルを考案できないかとの提案があった。

612 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:30:26 ]
>>597
そうですね。是非、そちらの方も活用させて頂きます。
scheme系は、まだ初めてから日が浅いこともあり、
気が引けてました。

>>600
私の不勉強で、どのようにJavaなどと同じ機構を実現するか分かりませんでした。
出直します。ただ、できるだけ独自の機構は避けたいと考えてました。

>>605-607
クロージャベースのオブジェクトシステムだと内部状態は隠蔽できますね。
ただ、CLOSとの相性・一貫性に不安があり、できればGaucheに標準的にある
オブジェクトシステムだけで解決しようと思ってました.
皆さんのおっしゃるように、発想を切り替えてみようと思います。

>>596-608
最後に。皆さん、レスありがとうございました。とても参考になりました。
CLOSと、Java/C++系とは異なる発想でプログラムを設計するという事ですね。
CLOSを実際にもっと使用して、その発想の違いを考えていきたいと思います。

613 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:47:01 ]
人気の言語を作るには ---Being Popular---
practical-scheme.net/trans/being-popular-j.html
を読んで妄想した事。
Lispにシステムハッキング機能を追加したら、インスタントLispマシンの出来上がり!!
Lisp Override your Operating System...

614 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:03:12 ]
>>613
つmovitz

615 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:51:43 ]
>>592-593
LanguageをSwindleに設定したらset-cdr!が使えました。



616 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:13:16 ]
>>615
ver4.0ってR6RSに対応したんだっけ?

617 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:47:57 ]
setq 説得

set-cdr! 説得だああああ!

618 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:54:30 ]
お〜い、山田く〜ん
617の座布団全部とれ!

619 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:34:39 ]
>>616
ほぼR6RSを満たすSchemeや、独自のPLT Schemeなど複数の言語が選べる。
そして、異なる言語で書かれたモジュールをインポートできる。

620 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:41:42 ]
>>616
>ほぼR6RSを満たすSchemeや

まだR6RSに対応できてないの?言語選択はR5RSのままだし。

621 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:12:48 ]
>>620
言語選択は一番上の ``Module'' を選ぶ。
ソース (DrSchemeのウィンドウの上半分) の最初の行に
#!r6rs
次の行に
(import (rnrs))
それ以降の行に定義を書いて
Runのボタンを押す。

622 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 19:12:34 ]
r6rsモードだと#lang schemeの組み込み関数とかsrfiとか使えなくね?

623 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 19:48:02 ]
R6RSになって「R5RS用のSRFI」は使えてるの?

624 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 19:59:04 ]
Revised6 Report on the Algorithmic Language Scheme
www.r6rs.org/final/r6rs.pdf

Revised6 Report on the Algorithmic Language Scheme ― Standard Libraries
www.r6rs.org/final/r6rs-lib.pdf

Revised6 Report on the Algorithmic Language Scheme ― Non-Normative Appendices
www.r6rs.org/final/r6rs-app.pdf

Revised6 Report on the Algorithmic Language Scheme ― Rationale
www.r6rs.org/final/r6rs-rationale.pdf

基本的には上2つがユーザーに重要な情報。
#次のテンプレに入れてください。

625 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:05:05 ]
ちょっと聞きにくい質問なんですが、
R6RSってR5RSとかと比べてどうなんでしょうか。
まだ出たばかりで実装は少ないと思いますが、
今後、多くの処理系で実装が進むのか、
また、ユーザとしてもR6RSへの移行を意識しておくべきなのか、
そういったことです。
ちょっと漠然とした質問でうまくまとめられなくてすみません。



626 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:10:00 ]
>>621
(import (rnrs))
↓↑
(import (rnrs (6)))

どっち?

627 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:14:27 ]
>>621
補足
特殊トークン #!r6rs はソースがR6RS準拠であることを示す。コメント扱い。

628 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:19:16 ]
(import (rms)) かとおもった。

629 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:25:35 ]
slibはちゃんと使える?

630 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:44:36 ]
>>625
R6RS決定時からPLT Scheme、Chez Scheme、Scheme48は近いうちにR6RSを採用すると言われていました。
今回、PLT Schemeが出してきたので、先行していたScheme48に続いて2つ目の実装かな。
Chez Scheme v7.4は部分的にR6RSのプリミティブが使えるようになってますが「will soon support R6RS standard.」となってるので、
次のアップデートで完全対応だと思います。

自分も含めたユーザーは実装が出揃って、ある程度比較記事などを見たうえで行動してもいいと思います。
今後、色々な問題点が表面化するでしょうから。
うまくいけばR6RS対応の色々な処理系に対するポータビリティは高くなる「ハズ」ですがw

631 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:19:15 ]
>>628
Join us now and share the software;
You'll be free, hackers, you'll be free.
って超音痴で歌うのか!

632 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:20:10 ]
Scheme48ってR6RSにもう対応してましたっけ?

633 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:22:20 ]
Fmmm..... なぜあなたは超音痴だと確信したのですか?

634 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:32:05 ]
>>633
一度聴いた事あるです orz


635 名前:デフォルトの名無しさん [2008/06/15(日) 21:43:46 ]
>>631
>Join us now and share the software;
>You'll be free, hackers, you'll be free.
これか…… jp.youtube.com/watch?v=9sJUDx7iEJw&NR=1



636 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:09:42 ]
>>622
(import
(rnrs)
(prefix (scheme base) scheme:))

637 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:19:10 ]
Gauche-gl入りバージョンをリリースしました。(Gauchebox-0.8.13-box2.exe)
sourceforge.net/project/showfiles.php?group_id=25227&package_id=275266&release_id=607291


638 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:20:02 ]
ガウチェ(・∀・)

639 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 20:56:24 ]
OpenBSDでClispをビルドすると
なぜか実行ファイル作成機能が壊れてしまうので
ソースを追ってみたのですが
とても不思議な現象に遭遇しました。
実行ファイルを指すファイルディスクリプタから
readで読み込む部分の前に
読み込み先メモリが一度は少なくとも4000バイト間隔で先頭から末尾までアクセスされてないと
EFAULTが起こります。
読み込み先メモリに4000バイト間隔で1バイトの読み込みOR書き込みを行ってから
readすれば正常に動作します。
なぜでしょう?
ちなみに4000バイト・EFAULTというのはi386プロセッサの場合で
armプロセッサの場合はそれぞれ3999バイト・EACCESになります。

640 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:57:20 ]
>639
まぁとりあえずスレ鯛みておちつけ

641 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:13:55 ]
CLispのビルドの問題なのでスレ違いじゃないと思ったのですが…

642 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:16:41 ]
つか、もし本当なら OS のバグ(つまりスレチ)じゃね?

643 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:22:38 ]
CLispならCommon Lispスレ行って聞いてみたらどう?
pc11.2ch.net/test/read.cgi/tech/1201402366/

644 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:29:25 ]
別にすれ違いだとは思わないよ。ただし、それにコメントができる人はほとんどいなさそう。

645 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:36:41 ]
>>644
>ただし、それにコメントができる人はほとんどいなさそう。
あら、そう。



646 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:39:10 ]
>>644
氏ね

647 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:40:37 ]
わかってるくせにwww

648 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:42:01 ]
OpenBSDのスレで聞けや、クズ

649 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:44:43 ]
いや、質問っていうよりは、報告したかったんじゃないのかなw

650 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:57:29 ]
言葉の使い方もシランガキが集まってきたな。


651 名前:デフォルトの名無しさん [2008/06/16(月) 23:58:43 ]
>>639
>readで読み込む部分の前に
>読み込み先メモリが一度は少なくとも4000バイト間隔で先頭から末尾までアクセスされてないと
>EFAULTが起こります。

部分の前に
一度は少なくとも

はどういう意味でしょうか? 文章を読みこなせません。

652 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 00:18:00 ]
仮割り当て状態のページに I/O するとエラーになるというんだろ。
本当なら OpenBSD のバグなので、そちら方面で報告すべし。

653 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:37:10 ]
別にすれ違いだとは思わないよ。
第一、そんなことも知らないと見下されてるわけか。バカにされたもんだな。
そういうことを聞いてるんじゃないってことがなぜ伝わらないのか。
情報があるなら教えて欲しい、それだけだ。

654 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:54:56 ]
>>65
最初の3行は不要
なぜ馬鹿にされたのか、なぜ伝わらなかったのかを考えたほうがいい

655 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:55:27 ]
>>654>>653



656 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:20:29 ]
>>636
でもこんなんなる

(car (scheme:list 1 2 3))
mcar: expects argument of type <mutable-pair>; given (1 2 3)

(scheme:car (list 1 2 3))
car: expects argument of type <pair>; given {1 2 3}

657 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:18:35 ]
>>654
> なぜ馬鹿にされたのか、なぜ伝わらなかったのか
運悪くこのスレに馬鹿が集まっていたからですね。

658 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:12:40 ]
運の悪い奴って何やっても駄目だよな〜

659 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:56:49 ]
>>656
list と pair では型が違うと言ってるみたいだね。

660 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:12:29 ]
(scheme:car ((scheme:list 1 2 3))

とか

(car (list 1 2 3))

なら動くんだろ?

661 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 15:33:58 ]
ネタか・・・

662 名前:639 mailto:sage [2008/06/17(火) 17:55:27 ]
具体的にはspvw_memfile.cの1196-1198行目(clisp-2.45の場合)に
READ(&old_fsubr_tab,sizeof(fsubr_tab));
READ(&old_pseudofun_tab,sizeof(pseudofun_tab));
READ(&symbol_tab,sizeof(symbol_tab));
というコードがあるのですが、
3つ目のREADマクロ中のread(2)が失敗し、
i386ならEFAULTが、armならEACCESがerrnoにセットされます。
ところが3つ目のREADマクロの前に
{
int i;
for ( i = 0 ; i < sizeof(symbol_tab) ; i += 4000 /* i386の場合。armの場合は3999 */ )
((char *) &symbol_tab)[ i ] = '!'; /* '!'という値には意味はありません */
}
というコードを挿入すればread(2)は失敗しません。
i386なら4001以上、armなら4000以上のiの増分ではread(2)が失敗します。
symbol_tabというのはマクロで、実体はsymbol_tab_dataを指していますが
old_fsubr_tabとold_pseudofun_tabはbssセクションに置かれているのに対し
symbol_tab_dataはdataセクションに置かれているという違いがあります。

663 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:07:22 ]
>>657-658
運の悪い馬鹿は自己申告しなくて良し。

664 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:13:29 ]
>>663
お前という馬鹿がここにいるのは>>657-658の運のせいではないですよ^^

665 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:23:09 ]
>>664
常駐乙



666 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:46:40 ]
運の悪い奴は何やっても駄目、という言葉を実感しつつあるw

667 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:11:46 ]
適当な実感でものを判断する奴も全然駄目だけどねw

668 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:28:43 ]
「情報があるなら教えて欲しい、それだけ」ならじっくり待ってろよ、まったく。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:31:29 ]
>>662
そこまで追ったのなら、馬鹿はほっといて、短い(CLISPに依存しない)再現プログラムを
作ってOpenBSDの人たちへ報告するのが良いと思う。

670 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:47:23 ]
>>662
その情報、ちゃんとOpenBSDの中の人たちに連絡したら感謝されると思うよ。

671 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:31:58 ]
>>656, >>660
ネタかと思ったけど、R6RSに慣れるまで大変ですねw
PLT Scheme 4.0 では、ペアはimmutable(変更不可)になりました。
mutable(変更可能)なペアは別のデータ型として提供されてるようです。
たぶん>>656, >>660で言ってることがそれだと思います。
手持ちのプログラムを食わせてみたら同様の文句を言われましたw
当面、372のままで行きます orz

672 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:40:50 ]
ようわからんが、C→C++でconstの扱いが変わったような感じなのかな。

673 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:50:10 ]
C++/CLIにポインタが2種類あるような感じだな

674 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:56:59 ]
immutableなconsセルというと後藤英一氏のHLISPが元祖だろうな。

675 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:37:18 ]
>>PLT Scheme 4.0 では、ペアはimmutable(変更不可)になりました。
これ、PLTのどっかに「どうなるかわかんないけど、取り合えずやってみるぽ」って感じの文章なかったっけ?
PLTさんお願いです、今回だけで止めてください m(_ _)m



676 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:47:56 ]
immutableにして何か利点はあるんですかね?
GPU対応とかconcurrent対応ぐらいしか思いつかない。う〜む。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:00:52 ]
こうやって解決しないの?
(define cons mcons)
(define set-car! set-mcar!)
(define set-cdr! set-mcdr!)

678 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:15:13 ]
Schemeはペアはimmutableでも良いんじゃないかなあ。
そんなに破壊的操作してるもんかね。

679 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:27:38 ]
>>678
Streamを使えば破壊的操作を使うから多いと思う。

680 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:39:44 ]
>> 677
(define cons mcons)

define-values: cannot change constant identifier: cons

エラーになります orz

681 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 08:02:56 ]
>>680
マクロは?

682 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 08:21:59 ]
DrSchemeはネタの巣窟ですね
MzSchemeなら問題ないです

683 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:03:53 ]
>>675
これ?
blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr.html

684 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:35:55 ]
>>683
それだ!サンクス
で、結局やることになっちゃったんだな。4.0でこうなったってことは...
そりゃ自分で書いたコードなら直すのも簡単だけどね orz

685 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:26:10 ]
set-car!: name is not defined, not a parameter, and not a primitive name
set-mcar!: name is not defined, not a parameter, and not a primitive name

使えない orz



686 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 15:29:02 ]
>>681
これで一応動く(PrettyBigモードとか)。SICPの学習には不便しないだろう。
(ただしR6RSとは共存出来ない。)

(define-syntax cons
(syntax-rules ()
((_ a b) (mcons a b))))

(define-syntax set-car!
(syntax-rules ()
((_ a b) (set-mcar! a b))))

(define-syntax set-cdr!
(syntax-rules ()
((_ a b) (set-mcdr! a b))))

687 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 15:55:29 ]
;こんな感じ。
;pre.plt-scheme.org/plt/doc/reference/mpairs.html
(require scheme/mpair)

(define-syntax cons
(syntax-rules ()
((_ a b) (mcons a b))))

(define-syntax set-car!
(syntax-rules ()
((_ a b) (set-mcar! a b))))

(define-syntax set-cdr!
(syntax-rules ()
((_ a b) (set-mcdr! a b))))

(define-syntax list
(syntax-rules ()
((_ a ...) (mlist a ...))))

(define Qoo (list 3 4))
(set-car! Qoo '(5 6))
(set-cdr! Qoo '(7 8))
(display Qoo) ; => {(5 6) . (7 8)}

688 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:07:21 ]
>>687
サンクス!
でも、こんどは
(map cons lst1 lst2)
が大破しました... "orz"
それなりの混乱が予想されるのにこうなったって事は何か良い見返りがあるはずだよね...

「隊長!comp.lang.schemeのアナウンスからPLT方面に潜入して偵察を試みてみます。自分が帰ってこないときは英語が解読できなくて玉砕したと思ってください orz」

689 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:10:45 ]
(define Qoo (list ))
(mlist? Qoo) ; => #t
(display Qoo) ; => () なぜか{}にはならない。

690 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:13:11 ]
>>688
pre.plt-scheme.org/plt/doc/reference/mpairs.html
ココの関数はマクロで修正しないとダメポ。
mmapが orz

691 名前:688 mailto:sage [2008/06/18(水) 16:24:41 ]
隊長!自分は現在683より報告のあったBLOGに到着しました。
驚くことにcomp.lang.schemeのアナウンスにはそれらしい情報は例のBLOGにしかありませんでした。
さらに驚くことにBLOGに対するコメントは好意的なものばかりのようです。
もしかして、自分はバカなのでしょうか "orz"



692 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:31:12 ]
Schemeは「破壊的操作の時だけアホになります」って言ってるみたいだ…

cons
せぇっと!
car
りば〜すぅ!
せっとくだー!
eq?

みたいな。

693 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:33:42 ]
(define-syntax map
(syntax-rules ()
((_ a b ...) (mmap a b ...))))

(map display (list 1 2 3 4 5)) ; => 12345{#<void> #<void> #<void> #<void> #<void>}

あれ?うまくいかない?

694 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:36:22 ]
(define-syntax map
(syntax-rules ()
((_ a b ...) (mmap a b ...))))

(map (lambda (x)(* x x)) (list 1 2 3 4)) ; => {1 4 9 16}
大丈夫らしい。

695 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:39:33 ]
正直、Schemeを名乗らないで別の名前を付けてくれと思った。



696 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:40:56 ]
Scheme 2.0 って感じだなw

697 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:45:05 ]
今後は従来のをScheme/NewJerseyとかダッサい呼び方するんだろうかw

698 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:49:23 ]
隊長!
BLOGにはimmutableなpairでないと

(define l (list 1 2 3 4 5))
(map (lambda (x) (set-cdr! (cddr l) 5)) l)

が変になるって書いてあるから試してみました。

Gauche(R5RS)
(#<undef> #<undef> #<undef>)
たしかにちょっと変。

Petite Chez(R5RS)
(#<void> #<void> #<void> #<void> #<void>)
たしかにちょっと変。

Guile(R5RS)
(#<unspecified> #<unspecified> #<unspecified>)
たしかにちょっと変。


699 名前:698 mailto:sage [2008/06/18(水) 16:50:09 ]
でもR6RSな処理系ではちゃんとエラーになっております。

Ikarus(R6RS)
Unhandled exception
Condition components:
1. &assertion
2. &who: map
3. &message: "list was altered"

Larceny(R6RS)
Error: car: 5 is not a pair.

Ypsilon(R6RS)
error in car: expected pair, but got 5

immutableなpairってやつはR6RSで必要になったから導入したわけじゃないのでしょうか?
自分はちょっと混乱しています "orz"


700 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:54:50 ]
>>698
d。俺が馬鹿だったw

701 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:57:25 ]
安全側に改良された感じだな。互換性無視については確信犯だろう。w

702 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:00:02 ]
Immutive Schemeって評判いいの?

703 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:02:15 ]
>>698>>699
それはmapの安全性の問題では?

704 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:05:25 ]
>>698のGaucheは、

gosh> (map (lambda (x) x) '(1 2 3 . 5))
(1 2 3)

と整合。set-cdr!の結果が#<undef>

Guile 1.8.3は、
> standard input:1:1: In procedure map in expression (map (lambda # x) (quote #)):
> standard input:1:1: Wrong type argument in position 2: (1 2 3 . 5)
> ABORT: (wrong-type-arg)
でエラー。


705 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:10:32 ]
immutable list相手なら、
(define (map f x)
(cond ((not (pair x)) (error "not pair"))
((null? x) ())
(#t (cons (f (car x)) (map f (cdr x))))))
の最初のチェックが不要になることが静的に分かるケースがあるわけですね。



706 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:13:16 ]
(define-syntax car
(syntax-rules ()
((_ a) (mcar a))))

(define-syntax cdr
(syntax-rules ()
((_ a) (mcdr a))))

707 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:19:18 ]
あまり抵抗せずに郷に入れば郷に従うのが良いのでは?
昔の教科書を一字一句変えずに動かしたいという理由が判らん。

708 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:40:54 ]
(define-syntax pair?
(syntax-rules ()
((_ a ) (mpair? a ))))

709 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:48:02 ]
お言葉ですが >>707 さん、自分がDrSchemeを使うのは「昔の教科書を一字一句変えずに動かしたい」からなのです><
バカと呼んでもらってかまいません...
やはりv372への「戦略的な撤退」でしょうか "orz"

710 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:58:15 ]
目的に合った処理系を。

711 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:02:27 ]
>>710
そうだよね。勉強が目的なのにそれ以外にエネルギー使うの無駄が多すぎる。
読み終わってから試行錯誤したほうがいいんじゃない?

712 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:31:53 ]
R"5"RSの教科書的実装ならばScheme48がいいかも
近々R6RS準拠になる予定だし

713 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:32:07 ]
immutableにした理由って、webアプリのインジェクション対策?

714 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:35:24 ]
>>713
なわけないw

715 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:36:15 ]
>>712
SICPはR5RSやR6RSってわけじゃないんだ。
DrScheme v372以前のPrettyBig modeが一番そのままで書けると思う。
他の処理系だとbegin使えとか言われる表記が満載>SICP



716 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:37:16 ]
新しいDrSchemeってドキュメントにThreadの項目が増えたの?

717 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:38:07 ]
>>710 >>711 >>712 >>715
みなさんご親切にありがとうございます m(_ _)m
どうやら「メジャーバージョンアップ!」しかも「R6RSに触れられる!」とあって舞い上がってしまったようです...
でも、今の自分はDrSchemeのマクロステッパーなしでは生きられません "orz"
耐え難きを耐え、しばらくの間4.0は封印しておきます><

718 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:38:18 ]
SICPならMIT-Schemeを使うとか

最近のMITはMzSchemeらしいけど

719 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:42:44 ]
>>718
つまりDrSchemeのMzSchemeモードと中身は同じ。

720 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:43:01 ]
>>718
ありがとうございます。MIT-Scheme使ってみたいんですが...
以前試した時はバイナリーが動かなくて、ビルドもできなくてあきらめてました (orz)
カーネルも新しくなったからもう一回挑戦してみようかと思います><b

721 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:15:24 ]
最近のMITのSchemeはPythonじゃないの?

722 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:46:58 ]
最近のMITのSchemeがPythonだとは初耳だw

723 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:37:58 ]
Scheme初心者の俺が通りますよ
質問なんだけど、トップレベルってなんか特別なの?

(define cc #f)

;A
(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)

;B
(begin
(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)
)

トップレベルでこーやったとき、Aが無限ループにならないのにBが無限ループになるのが理解できないの...

724 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:37 ]
>>723
継続はトップレベルをまたげない処理系が多い。(実装依存)
そういう意味ではトップレベルは特別。

725 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:50:50 ]
>>724
そーなのかーありがとー
実装依存か 処理系もかかないかんかったね がうちぇです もう一度いいます がうちぇです



726 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:51:51 ]
あれてきたときにスルーするをCommon Lispでどうかくのか?

(progn
 (loop for i in '(>>657 >>658 >>663 >>664 >>665 >>666 >>667 >>668) do
   (unintern i))
 (gc)
 'Done)

727 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:13:30 ]
>がうちぇ
セロ弾きの「ごーしゅ」じゃなかった?

728 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:19:17 ]
ガウチェ(・∀・)
の方がなんとなく小気味良い気がして

729 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:19:59 ]
がうちぇのがしっくりくるのは間違いない

730 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:25:26 ]
がうちぇの方が美味しそう

731 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:28:04 ]
ガウチェ(・∀・)
のほうがかわいいことは確か。

732 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:40:36 ]
>>723-725
DScheme v372 では両方ともhogefugamogaが返ってきた。一応、報告のみ。
理由は説明できないw

733 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:50:00 ]
>>724
R6RSでは明確に決まってなかったっけ?

734 名前:723 mailto:sage [2008/06/19(木) 02:12:50 ]
>>732
両方無限ループならわかるけど無限ループらないのはわからないwwww
アリガト!

735 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 09:55:33 ]
プログラムのトップレベルでの(begin <表現形式1> ...)は、beginのボディを形成する連続する式、定義、構文定義に等しい。(R5RS 5.1)

(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)
においてcall/ccが返し、ccに記憶される継続は
(lambda (x)
 (print (display x))
 (loop (print (eval (read) (interactive-environment)))))
と看做せるから無限ループに陥らない。
他方、
(let ()
 (display (call/cc (lmabda (c) (set! cc c) (cc 'hoge))))
 (display 'fuga)
 (cc 'moga))
においてcall/ccが返し、ccに記憶される継続は
(lambda (x)
 (display x)
 (display 'fuga)
 (cc 'moga))
と看做せるから無限ループに陥る。
(ccの末尾再帰呼出し)
beginをR5RS巻末のように合成構文として実装すると後者になるが
原始構文として規格通りに実装すると前者となる。



736 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 10:47:48 ]
>>735
ありがとう。
つまりbegin構文を、Gaucheは合成構文として実装してるけど、
DrSchemeは原始構文として実装してるということみたいですね。

737 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 13:21:59 ]
>>735-736
質問です。原始構文として実装してるということは、ifやletのような特殊形式ということなんでしょうか。
初心者なので特殊形式を知ったばかりですが、SICPにnew-ifという例があったのと似てると思いました。

738 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:26:32 ]
>>735>>736
R5RSの「原始構文」って何よ?

739 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:37:01 ]
Schemeのプリミティヴ構文はif、quote、lambda、define、set!であり、
letやcondなどは導出構文という事になってます。
(但しbeginやdefine-syntax、let-syntaxはマクロでは導出できない)
Common Lispでは特殊形式とマクロという区別がありましたが
Schemeでは両方構文として扱われます。

どうもbeginはトップレベルでは「beginがない式と同等に扱われる」のは表面上であり、継続は
(lambda (x)
 (begin (display x)
     (display 'fuga)
     (cc 'moga))))   ;; beginは冗長
として扱う処理系が多いようですね。

原始構文という言葉はプリミティブ式のうち構文であるものを指すつもりで使いました。

740 名前:723 mailto:sage [2008/06/19(木) 22:01:45 ]
>>735
ふおおなんか説明してくれてありがとうなんだけど何言ってるかわっかんねw

>beginのボディを形成する連続する式、定義、構文定義に等しい。
って、つまりbeginで囲ってないのと同じ意味になるぜよってこと?

741 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:09:48 ]
>>740
つまりR5RSの定義ではbeginのトップレベルにおいてDrSchemeのような挙動が期待されてる。
Gaucheを含めた他の処理系の挙動はR5RSとしてはおかしい。R6RS対応だからというわけでもないし。
これは>>724で言ってた処理系の実装依存の問題というより、うまく実装できていない処理系が多いということだと思う。

742 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:15:45 ]
それがR5RSの仕様に反する事をしないScheme48でも無限ループになるんですよ。
トップレベルのbeginはローカルスコープを作りませんよ〜くらいの意味にも取れますから
無限ループになってもR5RSに反するとは言い切れませんね。
R5RSは細かく呼んでいくと解釈の分かれる部分が多々ありますし。

743 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:17:17 ]
typo
呼んでいく→読んでいく

744 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:20:12 ]
Scheme48でも無限ループになるからR5RSではトップレベルのbeginで無限ループを作ることが仕様に盛り込まれてると?
Gaucheのバグだと思うなぁ

745 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:31:28 ]
いや、R5RSを読む限りでは無限ループになるのもそうでないのも
どちらも規格に反しない、という事だと思います。



746 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:44:07 ]
初心者の俺様からすれば無限ループになってくれたほうが理解しやすくて幸せだぞ

747 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:49:58 ]
仕様というのは、それに従って作ればバグが無いものが作れるとは限らない。
だけど、バグが無いものを作るべきだと思うよ。

748 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:08:58 ]
Schemeってどやってshort codingするの?
CならハッカーのたのしみやShort Coding等の本があるのに情報不足でしょ?

749 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:39:10 ]
どうしてshort codingしたいの?

750 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 07:10:41 ]
ChickenってWindowsBinaryのヤツ使えばexe吐けるの?
とりあえずインスコしてやってみてもうまく出来ないし公式サイトにもWindowsでexe作る方法書いてないっぽいし困ってしまったよ!
教えて!エロい人!

751 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:20:26 ]
クイックソートをcps変換したときappendってタイプするのがめんどくなって
(define ++ append)
ってしたけどこれはshort codingに入りますか

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

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

857 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 18:55:32 ]
unicodeで書いたソースコードの改行が"\n"になってる処理系と"\n"(\は半角)になってる処理系があるんだな。
"\n"で改行しなくて驚いた。

858 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:15:04 ]
>>856
(define (^-^)(print '許してやんなよ。))



859 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:16:26 ]
>>855
これってアンチのネタだったのか・・・

860 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:17:52 ]
>>858
(define (・x・) (print 'Bカップ))


861 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:18:53 ]
>>855-856がshiroさんのもうひとつの顔だったら怖い

862 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 19:30:21 ]
いいこと思いついた
おまえらちょっとeval書け

863 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:31:12 ]
REPL「いいこと思いついた。おまえ俺の中でbeginしろ。」

864 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 02:02:39 ]
>>858, >>860
> (^-^)
許してやんなよ。
> (・x・)
Bカップ

エラー吐くかと思ったらw

865 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 02:24:42 ]
(cut or <> <>)
(fold or #f '(#f #f #t))
怒られる なんで?



866 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 02:32:46 ]
orがapply出来ないから。
(fold (lambda (x y) (or x y)) #f '(#f #f #t))

867 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 03:00:35 ]
そうなのか…
ちょっと明日R5RSとにらめっこしながら考えてみるわ
不便だなぁな気がする…

868 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 03:41:29 ]
C言語に例えると式の中にif文混ぜるようなもの。

869 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 07:21:11 ]
>>855
>S式の評価なのに値呼びpgr
値呼びは間違いではないし、pgrなんて誰も言ってないよ。

式を評価するタイミングを理解できない人が多いのは
S式の見た目が単純すぎることと、評価の仕組みがわりと複雑なことのギャップが
驚き最小の原則に反しているんじゃないかな。

870 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 07:59:08 ]
Gaucheでバグかなと思ったのあるけど聞ける雰囲気じゃないね
Rubyより怖い

871 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 08:10:33 ]
ああ、宗教的な何かがここに蔓延してることにしたいわけね。

大丈夫だよ。馬鹿は論理的に叩かれるけど、馬鹿じゃなければ叩かれない。
書いてみれば?

872 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 08:24:07 ]
>>867
orが普通の関数だと、
ショートカットにならなくて、
それはそれで不便。

Schemeの特殊形式は
数が少ないから覚えられる。
覚えよう。

873 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 08:39:11 ]
rubyってこわいの?

874 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 08:52:37 ]
つ 落語&「rubyよりこわい」

875 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 09:13:10 ]
>>870
別にネタや燃料の投下になってもいいじゃん!



876 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 12:41:57 ]
バクだってあるさ
にんげんだもの


877 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:18:00 ]
ココのスレ見るとLisperさんが何をしてきてどう思われてるかが良くわかります。こういう印象です。
pc11.2ch.net/test/read.cgi/tech/1209441159/

878 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:20:40 ]
粘着、こっちまで遠征かよw

879 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 19:58:10 ]
>>871
ほとんど名指しされてるw

880 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 06:31:04 ]
>>870 WiLiKiに書いたら? ちゃんと対応されるみたいだし

881 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 06:44:49 ]
Rubyをプログラミング言語の基準にやめろ
あれはあれで特殊。

RubyとGaucheとMosh、みんな違ってみんないい

882 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 06:50:14 ]
ジャパニーズでおk

883 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 08:34:34 ]
>>882
I cannot understand your words.
"It is k in Japanese"
What meaning is it?
Please write in English.

884 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 11:02:25 ]
コピペか? ひっでえ英語w

885 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 13:07:52 ]
>>884
偶然だぞ

何言いたいかと申しますと「ジャパニーズでおk」という日本語では、外人さんに伝わるものも伝わらないだろう、と言いたいわけです

日本語でやり取りしてるサイトなのだから外国人なぞ居ない、日本人しか居ないのだ、と思い込んでいませんか?
日本人がYoutubeを使っているように、外国人も2chを使っている可能性があるのではないのですか? 何故その可能性を排除しますか?
母国語ではない言語を使うことに苦労しながらも、それでも私達とコミュニケーションをとろうとしている(のかもしれない)人物に対して
「ジャパニーズでおk」という物言いをするのは良いことなのですか?
コミュニケーションをとろうと努力している(のかもしれない)相手に対して、随分失礼な態度ではないのでしょうか
それとも、そんな振舞いをするのが日本人なのですか? 相手にけして通じない言葉を使って悦に入る。それが日本人の性格なのですか?

プログラミング言語のほとんどは日本以外の国で作られたものですから、日本人はその習得や理解に多少なりとも苦労しているはずです
ドキュメントの大多数は英語文献で公開され、英語が不得意な日本人であれば読むのも一苦労でしょう
そのような苦痛をこの板に集う人々は自ら日々感じていながら、何故相手に通じない日本語を使うのですか?



886 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 13:09:55 ]
そして私は思いました
>>881が日本人なら、私こそが失礼なことを言っています…

887 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 13:28:06 ]
886は外人さんなのな
2chはある意味、かなり高度な日本語(スラング的な意味で)が要求されるから
もっと慣れてから書き込むべきです。
このBBSで長文を書き込むことと、必死になることは推奨されていません。

そしておそらく881は日本人です

888 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 14:00:40 ]
おまえらの人種が何なのかなんて興味無いよw

889 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 14:35:56 ]
おまえらここは言い争いの場にやめろ

890 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 15:24:25 ]
>>888
おまえの興味なんて興味無いよw

891 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 15:25:16 ]
>>890
おまえの興味なんて興味無いよw

以下再帰的なので略

892 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 15:30:14 ]
ここは酷い名無し再帰スレです。

893 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 16:54:30 ]
>>892
Yコンビネータ乙

894 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:08:39 ]
不動点ですが何か?

895 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:15:23 ]
>>894
894 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:08:39
不動点ですが何か?



896 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:18:32 ]
>>895
895 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:15:23
>>894
894 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:08:39
不動点ですが何か?


897 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:19:16 ]
>>896
896 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:18:32
>>895
895 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:15:23
>>894
894 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/27(金) 18:08:39
不動点ですが何か?

898 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:35:05 ]
やめいw

899 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:05:20 ]
本当に再帰すんなw

900 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:15:21 ]
ヌルポ

901 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:18:55 ]
ガッ

902 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:26:11 ]
再帰を終わらせようと思ったのにガッされたお(´・ω・`)

903 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:48:48 ]
>>902
つぎはcall/ccをかませよ。

904 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 20:46:10 ]
pythonの内胞リストで感動してきた
www.ibm.com/developerworks/jp/linux/library/l-prog3/

要するにmapの拡張だと思うんだけどmapの拡張を柔軟にするって意味では
lispのmacroも同じ?

pythonの内胞リストと同じマクロって作れないの?

905 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:11:58 ]
>>904
(use srfi-42)




906 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:13:46 ]
リスト内包記法な

907 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:55:32 ]
>>904
実用的なのは >>905 が書いてるsrfi-42だが、マクロでの実現法を
知りたいならここにあるlist-ofが参考になる。15行で内包表記を実現。
practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%e3%81%ae%e5%8a%b9%e7%94%a8#H-b9epxs

908 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:57:15 ]
内包表記は複雑。あんなものは内包がいい。

909 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:05:00 ]
うまいこと言うなあ

910 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:17:56 ]
尊敬します!

911 名前:デフォルトの名無しさん [2008/06/27(金) 22:47:39 ]
Lispに入門したいけどまだ戸惑ってる僕が質問します。
みなさんはLispを使って何をしていますか?

ばかな質問だったら無視してください。

912 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:48:57 ]
仕事

913 名前:デフォルトの名無しさん [2008/06/27(金) 22:54:47 ]
>>912
すごっ、どんな分野なんですか?

914 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:58:31 ]
ふつーに、ちょっとしたデータを作ったり、ソースとかドキュメントを加工したりするのに使ってるよ。

915 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:59:50 ]
912ではないが
設定ファイルのインタプリタとか
シェルみたいにインタラクティブに何か操作する言語を作るとか



916 名前:デフォルトの名無しさん [2008/06/27(金) 23:03:09 ]
みんな実務に使ってるんですねぇ。
CG系の目的で使ってるひといませんか?

917 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:03:42 ]
よほどのことが無いかぎり、プログラムは Lisp (私の場合はCommon Lisp)で書いている。
よほどのこと、というのは、
・効率などをシビアに要求されて、他の言語でないとその要求を満たせない場合
・他の言語を使えばおそろしく簡単に(たとえばライブラリを呼ぶだけ)済む場合
・(顧客の指示など)社会的な理由でLispを使うことが許されない場合

918 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:04:32 ]
>>916
レンダリング系は難しいかもしれないけど、モデリング系ではかなり使われてると思う

919 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:08:45 ]
>>916
昔々Symbolicsというマシンがあってだなあ・・・
いや年寄りの独り言だ、忘れてくれ・・・ orz

920 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:10:04 ]

昔話禁止しようぜ


921 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:11:07 ]
R5RSは忘れてR6RSにしようということですね。わかります。

922 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:16:24 ]
>>916
例えばここ見てみるといいよ。
ttp://www.franz.com/success/customer_apps/animation_graphics/

923 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:45:50 ]
R6RSも忘れてERR5RSにしようということですね、わかります

>>911
あなたは両手を使って何をしていますか?
(もし手の不自由な方だったら申し訳ありません。意味を汲み取ってください。)

924 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:51:55 ]
>>923
> あなたは両手を使って何をしていますか?

自慰


925 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:56:14 ]
>>924
片手でやれ



926 名前:デフォルトの名無しさん [2008/06/28(土) 01:19:54 ]
>>923
すみません、意味を汲み取れませんでした。
今はタイピングしてますね。

927 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:32:39 ]
深い意味があるわけではありません。
なんか予想外の方向に展開してますが
日常生活の動作の多くに(無意識に)両手を使うように
コンピュータを使う動作の多くに(無意識に、とまではまだ私はいきませんが)Lispを使うのです。

などと書きましたが未だに3分の1くらいはBシェルスクリプトにしてしまいます:-P

928 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:42:44 ]
春先辺りから変なのが常駐してるな。

929 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:09:44 ]
だれかグレアムおじさんのArcを実装しようという方はおらんのかね

930 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:23:06 ]
>>929
グレアムおじさん

931 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:53:38 ]
>>916
ちょっと違うかもしれないけどこういうのもあるよ
www.pawfal.org/fluxus/

932 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:58:24 ]
>>916
gimpのscript-fu?


933 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 16:00:43 ]
行列計算とplot関係はpythonで
pythonのメタ制御をlispでしたい
しかし理想の環境はいまだできず

934 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:32:42 ]
それLisp必要か?

935 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:36:23 ]
それPython必要か?



936 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:43:54 ]
行列計算はどうなの?

937 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:57:20 ]
Ypsilon Scheme System(イプシロン・スキーム・システム)はプログラミング言語Schemeの
最新規格R6RS*に準拠する実装です。インタープリタの特性を活かしてスピーディーで
インタラクティブなアプリケーション/ユーザーライブラリーの開発を可能にします。また
マルチコアCPU用に最適化したMostly Concurrent Garbage Collectionを実装することに
より、極めて短いGC停止時間と並列実行によるパフォーマンスの向上を達成しています。

ttp://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon_Scheme_System

この会社のピンボールゲームとはMacでトリスタンやって以来の付き合いなわけだが、こう
いう方向に来るとは思わなかった。

938 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 18:00:59 ]
Python上で動くフルスペックのCommonLispとSchemeが欲しい。(CommonLithpとかThcheme?)
OCaml上でも可。(OCSみたいなヤツ)



939 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 18:59:37 ]
>>938
逆を作った方がいいだろうな。jpythonやiron pythonみたいにcl pythonかsbcl pythonでも
考えてみたいい。

940 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:05:16 ]
PythonやOCamlが動く環境のほうが
CLが動く環境よりも多いんですよ
それにPythonやOCamlは処理系が統一されてるし

941 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:27:05 ]
>>939
> 逆を作った方がいいだろうな。
> 考えてみたいい。

意味不明



942 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:56:15 ]
>>938
せめてJavaがいいな
schemeではありそうだけど

943 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:01:56 ]
C/C++上で動くSchemeの何が気に入らないのかが不明だが
宗教上の理由かな

944 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:04:53 ]
gaucheをxrea

・仮想環境にopenSUSE 10.3/11.0 i386版をインストール
・ディレクトリ /virtual/(xreaのあなたのID)/ を作る。
・そのディレクトリの下に bin lib share ディレクトリを作る。
・gaucheのソースを本家からダウンロード&展開
・gauche-0.8.xxディレクトリに移動
・./configure --prefix=/virtual/(xreaのあなたのID)/
・make
・make install
・/virtual/(xreaのあなたのID)/に移動
・ tar cjvf gauche.tar.bz2 bin lib share
・ gauche.tar.bz2 を xrea に持っていく。
・ sshでxreaにつなぐ
・ そこで tar xjvf gauche.tar.bz2 とする。

おしまい。openSUSEにはyastからautomake autoconf など開発系のパッケージを入れること。

945 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:08:09 ]
>>944
しまった、誤爆です。でもここでもいいか。



946 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:08:10 ]
Python上であればPythonから簡単に呼べるという幻想でしょ。
たぶん性能が悪くて使い物にならないと思うけど。

どうせやるなら Java VM か .NET CLR 上が面白いだろうね。

947 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:19:03 ]
>>943
C/C++ではGUIの仕様の統一が図れないしi386やLinux/Winのみをターゲットにしている事も多い。
JAVAは純正はポータブルじゃないしクローンは(よくなったとはいえ)まだ不完全。
PythonやOCamlは派生処理系はあるもののメインに概ね統一されてるしポータビリティもいいしGUIもある。
という理由です。
FiclやLuaみたいにANSI-Cが必要十分条件なCL or Schemeがあればそれが一番いいんですが。
(といってもGUIの問題が残るけど)

948 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:25:10 ]
要はgccとPOSIXとXがある環境ではどこでも動いてよ!ってことです。

949 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:25:51 ]
gcl がそれに近いかなあ

950 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:32:05 ]
GCLはソースが古すぎてビルドできませんでした(古い関数が使われている?)
その末裔のECLはBoehmGCをportしたらビルドできましたけど

951 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:35:57 ]
どっちにしても Python 上に作ってもまともな性能なんて出ないよ

952 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:39:54 ]
Python上に作るっていうか
JavaVMにおけるKAWAとかSISCみたく
PythonVM上で直接実行されるようにすれば
CLispくらいにはなりませんかね?

953 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:54:24 ]
>>947
ocamlやpython,rubyのGUIって標準はtcl/tkちゃうん?
clはltkが一応あるよ。

954 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 22:03:04 ]
>>947
PythonやLuaの実装言語はCなんだから、
CでGUIを統一できないとか移植性がないとか言うのはおかしいでしょ

955 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 22:42:58 ]
PythonやLuaやRubyは言語≒実装なので事実上の標準という縛りがあるから
その上で動くもののポータビリティが保たれることを利用して
SchemeやCLよりも低レベルでポータビリティを実現して欲しいんです。
いろいろな処理系を移植するのは骨が折れるので。
LuaにGUIがあるのかどうかは知りませんが
必要十分条件が明白な言語の代表として名前をあげました。
POSIXでXlibとgccがあればフル機能は無理でも標準機能はビルドできる、くらいの条件があって欲しいです。




956 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 22:47:32 ]
欲しいものはよく判った。でも今のところ無いと思う。
性能が出なくて労力の割に面白くないから、誰も作らないんじゃないかと想像できる。
だが、やってみなくちゃ判らないぞ。>>955の偉業に期待だ。

957 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 23:06:28 ]
>>955
ansiなscheme or CLにTcl/Tkをポートする方が楽そう。


958 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 23:30:13 ]
GUI込みならPythonアプリはそれほどポータブルではない。

959 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 00:08:49 ]
>>955
LuaにGUIはないが、君の言う通り「Luaよりも低レベルで」ポータビリティを実現できる
Cで書ける部分を無理にLuaで書くことはない

960 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 00:30:30 ]
>>955
Python上で実装してポータビリティを上げるって
衝撃の馬鹿理由だな。

961 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 00:49:27 ]
ポータビリティとライブラリを重視するのは良いと思う
性能重視は競争が激しいし供給過剰だし

962 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 01:03:14 ]
もうすぐ次スレだな

963 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 01:15:09 ]
ypsilon vs gauche

964 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 04:50:03 ]
pythonはポータブルじゃないよ


日本じゃ人気がないから

965 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 07:10:54 ]
おれは最近、仕事でpythonばっかり書いてるよ。
時々lispとの微妙な違いに悲しくなるけど、確かにlisperとしても許容できる、
良い言語だわ。ほぼどこでも動くし、ライブラリも沢山。
そのうち趣味でもpythonばかりになるかも。



966 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 08:39:27 ]
ANSI-Cが必要十分条件だとGC書けねーよ

967 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:28:25 ]
>>933-935
matlabに慣れてるからpython.numpyが使いやすい
しかしちょっと高度なこともしてみたい
全部lispでやったほうがいいのだろうか

968 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:28:57 ]
>>938-939
pyffi

969 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:57:24 ]
>>967
あまり融合度が高くないが、
clisp.cons.org/impnotes/matlab.html

matlabじゃないが、
nlisp.info/

970 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 13:08:28 ]
ピンボールの話題がまだ出ていない件

971 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 13:09:16 ]
ごめん。>>963見落とした

972 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 14:30:26 ]
「事実上の標準」はTck/TkでもXlibでもなくGLUTというオチ

973 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:42:13 ]
>>970
ピンボールよりメタボールの方が面白そうだなあ

974 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:21:52 ]
evalでschemeが評価できるpythonとか逆にschemeでpythonが評価できるとか


975 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:32:26 ]
データの互換性があると使いやすいのだろうが、LispのconsセルとPythonのtupleには
微妙な違いがあったり、symbolに相当するものが無かったり、PythonってLispのようで
Lispでないって感じだよね。



976 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:33:24 ]
うわさのypsilonをコンパイルしようとしたらエラーで止まっちゃったわ。
x86_64に対応してないって書いてたわ。残念。

977 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 21:52:16 ]
Scheme on Java > SISC
継続不完全でもJavaとのリンク強ならKawa


978 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 18:34:57 ]
まず考えるべきことは、なぜC/C++とのリンクが弱い (と思われている) かだ

979 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 12:45:38 ]
>>976
32bitでコンパイルすればいいじゃん。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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