Lisp Scheme Part41 (855レス)
Lisp Scheme Part41 http://mevius.5ch.net/test/read.cgi/tech/1531587928/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
191: デフォルトの名無しさん [sage] 2020/04/29(水) 03:18:21.69 ID:ALOjMFFX >>189 > 私は R5RS (など) と言い回しが違うという点に引きずられていましたが、 > "from the first elements to the last" というフレーズ単体で見ると範囲のニュアンス > で捉える方が自然ですかね。 いや、違う。 R5RSとRacket Reference v7.6とでのmapが手続き(proc)を適用する要素の順番に関して言及しているのは 各々、以下の箇所だが、両者では明らかに全く異なる。 R5RS>The dynamic order in which proc is applied to the elements of the lists is unspecified. Racket>Applies proc to the elements of the lsts from the first elements to the last. R5RSは>>187で君が述べていた通り、リストの要素への適用順序はunspecifiedだと明確に書いてある。 これに対してRacket v7.6ではprocをlstsの最初の要素から最後の要素へと適用すると書いてある、 つまりリストlstsの要素の並びの順番に手続きprocを適用して行くと明記している。 だからprocとして受け取った値を標準出力に書き出す手続きを渡せば、R5RSでは表示される要素の順番はどんな順序でも良いのに対して Racket v7.6では元のリストlstの要素の並び順に必ず表示せねばならない。 これは私の想像だが、R5RSでmapが手続きを適用する要素の順番を規定しないと明記しているのは長大なリストに対する並列処理を可能にするためだろう。 逆に言えば手続きの適用順序を確実に把握したい場合にはmapでなくfor-eachを使えというのがR5RSを定めたチームの言語設計上の意図だろう。 >>190 > 保証とはどういうことを指しているのだろう その言語仕様書のそのバージョンに準拠していると宣言している言語処理系は、それを守らねばならない(守っていなければバグだ)という意味だよ。 だから今の例では、Racket Reference v7.6準拠と処理系が宣言したら、その処理系はmapで手続きを適用する要素の順番を必ずリストの並び順に する義務が生ずる(Racket v7.6の定める言語仕様=Racket v7.6ユーザとの約束の順守を保証せねばならない)、ということだ。 当然ながら、言語仕様書のバージョンが変われば約束(つまり言語仕様による規定の内容)も変更され得る。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/191
193: デフォルトの名無しさん [sage] 2020/04/29(水) 09:21:45.86 ID:sxS/u8Yc >>192 それは承知しているのです。 ここでは Racket のドキュメントをどう解釈すべきかというのが論点です。 >>191 > 最初の要素から最後の要素へと適用すると書いてある 順番に (in order) とは書いていません。 順序が意味を持つ箇所ではおおよそ order という語で強調しているのに それがないここでも順番であることを確信してよいほどに (英語のニュアンスとして) 自明でしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/193
194: デフォルトの名無しさん [sage] 2020/04/29(水) 09:54:06.36 ID:sxS/u8Yc >>191 > 長大なリストに対する並列処理を可能にするためだろう 手続きの引数の評価順序については未規定ではあるものの "some sequential order of evaluation" という制約がついています。 https://docs.racket-lang.org/r5rs/r5rs-std/r5rs-Z-H-7.html#%_sec_4.1.3 ちょっとわかり難いんですが、これは「同時ではない (かのように動作する)」と解されるそうです。 たとえば (list (begin (display 'a) (display 'b) 1) (begin (display 'c) (display 'd) 2)) とあったときに表示は abcd か cdab のどちらかであり acbd だったり cabd だったりはしない ということです。 map についてはこういう制約は書かれてはいないものの、 順序は規定しないという文言は「既定はしないけどなんらかの順序を想定する」 とも読めなくもないので並列化を許しているとは言い切れない気がします。 副作用がないときに限っては並列化しても仕様に反しないのは間違いないですけど、 その場合は順序に関して有るとも無いとも書く必要がないんですよね。 どうせ観測できないので。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/194
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s