Lisp Scheme Part41

2018/07/15(日) 02:05:28.62ID:oGr67yTf
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part40
http://mevius.5ch.net/test/read.cgi/tech/1426481152/

■テンプレ
ttp://wiki.fdiary.net/lisp/

■関連スレ
【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1483498849/
【GNU】スクリプト言語 Guile【scheme】
http://mevius.5ch.net/test/read.cgi/tech/1239985829/
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
Lisp@UNIX版
http://mevius.5ch.net/test/read.cgi/unix/1019926525/
2019/09/30(月) 19:15:16.39ID:pw7Asu32
>>92
俺もつながらん。 プロバイダは Biglobe
2019/10/03(木) 21:39:01.39ID:5qBGt8Nl
jpドメインは拒否されてるのかもね
契約してる激安海外VPS経由でアクセスしたら見れたけど、プロバイダ経由だとpingも通らんわ
2019/10/04(金) 01:18:49.35ID:8amtWMNV
>>95
私の場合は日本のISP(海外の出版社のサイトとかでアクセスした側の国を自動判別している場合は日本と判定される形の接続法)で
インターネット接続しているけれどwww.call-cc.orgのHPやその下の様々なページは普通に見えるよ
97デフォルトの名無しさん
垢版 |
2019/10/04(金) 16:00:04.95ID:QJ6Astzp
Common lispよりschemeの方がユーザ多いの?
一番人が多そうなのはracket?
98デフォルトの名無しさん
垢版 |
2019/10/04(金) 16:48:57.33ID:QJ6Astzp
https://www.european-lisp-symposium.org/2019/index.html#programme
common lispの方が発表多いですね
2019/10/05(土) 12:25:09.41ID:f93dK2tU
schemeは実装多すぎてどれを選べばいいのか分からん、 特定実装に依存すると いつか廃れたときに困る。RnRSやらsrfi-xx どこまで使えるのかマチマチだからね。
common lispは今のとこ sbcl にしとけば間違いなさそうな安心感がある
2019/10/05(土) 12:32:44.20ID:oRBX06Fv
ほんとぉ?
2019/10/05(土) 20:42:35.85ID:havjxsgq
>>99
ちゃんとメンテされている商用以外のフリーの処理系はSBCLしかないという…
2019/10/06(日) 01:02:08.24ID:RRBV0NuF
Scheme で安心感の強い処理系っていうと Racket とか Guile とかかな。
そう簡単に廃れなさそう。
2019/10/06(日) 03:01:34.82ID:Wv7rmhQe
Schemeの無料で使える処理系で例の大顰蹙買ったR6RS対応してるのってあるの?
2019/10/06(日) 09:12:01.09ID:RRBV0NuF
>>103
あるよ。

Racket
Chez
Vicare
Sagittarius
Ikarus
IronScheme
Ypsilon
Mosh
Larceny

R6RS に準拠ってほどではないけど一部をサポートしているものとしては

Guile
BiwaScheme

もある。
Sagittarius と Larceny は R7RS もサポート (R6RS と R7RS を混在させることも出来る) しているよ。
Vicare, Ikarus, Ypsilon は実質的に動きが無くなっているのでこれから使うのはやめた方がいいかもね。
2019/10/06(日) 13:53:35.26ID:5nvjhJQN
なんでGaucheが出てこないんだ?
R7RS準拠と書いてあるよ
2019/10/06(日) 15:28:01.43ID:RRBV0NuF
>>105
ここでは >>103 に対する回答なので R6RS の話をしてる。
2019/10/06(日) 19:19:12.92ID:Wv7rmhQe
>>104
お教え下さり、どうも有難うございました。
RacketもR6をサポートするようになってたんですね。
R6発表後も数年間はRacketはR6対応じゃなかったようなのでサポートする気がないのかと勝手に思い込んでました。
2019/10/06(日) 21:38:25.02ID:NStuTL+0
R7RS⊃R6RS⊃R5RS
ではないんだっけか
CommonLISPから何も学んでねーな
2019/10/06(日) 22:34:51.75ID:RRBV0NuF
Scheme はまだ未完成という意識がある気がするな。
だから実務指向な言語と違って現段階では互換性を重要視してない。

重要視はしてないけど突飛な変更が入ってるわけでもなくて、割と正統進化してると思うよ。
R6RS が異端なだけ。
その R6RS にしたところで R7RS と共存が可能な程度に近しいわけだし。
2019/10/10(木) 09:50:54.15ID:8dwom9+O
Gauche の作者さんの話がバズってた、schemeと全然関係ないけど。
https://b.hatena.ne.jp/entry/s/twitter.com/anohana/status/1181858642217197570
https://twitter.com/5chan_nel (5ch newer account)
2019/10/10(木) 13:13:17.58ID:8G2AB5zJ
手口が巧妙やなあ
2019/10/15(火) 22:29:00.84ID:sgOHpX5p
バズではないでしょ
2019/10/24(木) 14:55:50.74ID:9HSU6Di+
関数の値が最も0に近くなる引数を求めたい時、どう書けばいいんでしょう?
繰り返しで引数を少しずつ変えていけばいいのはわかるのですが、定石とかあるんですか?
2019/10/24(木) 20:55:13.50ID:3+tysLZD
その関数が線形なのかとか微分可能なのかとか分からんとなぁ
2019/10/25(金) 01:02:52.70ID:IZH7p7oT
微分可能ならニュートン法が簡単

そうでないなら、範囲 [ a , b ] をステップ幅 (b-a)/n で 暫定値を探る。(n:分割数)
それが範囲の左右半分どちらにあるかに応じて値 a, b を更新、あとは再帰的に投入。
ステップ幅 が指定誤差未満になったら a を返して脱出

そのまま愚直に組むだけならそんなに長くならない。
2019/10/26(土) 10:42:36.27ID:v7RlO1g+
>>113の言ってる関数は数学の関数じゃなくてプログラムの関数の事でしょ…
多分線形でも微分可能でもないだろう
乱数使って適当な範囲で試行してずらしながら一番近そうな範囲を選択して絞り込んでいくという位しか思い付かない
2019/10/26(土) 22:25:16.53ID:IPzUune1
どちらの関数にせよ考え方は一緒じゃないかな。
値の変化が連続的でなければそのやり方では求められないし、連続的であっても極小値に落ち込んでしまう可能性がある。
関数がハッシュ計算するようなものだったら総当たりしかないのでは?
2019/10/28(月) 06:02:05.57ID:T/Np/NFy
bel
http://www.paulgraham.com/bel.html

グラハムの新しい方言だって
2019/10/28(月) 06:33:09.38ID:kIF/RW73
誰かと思ったらグレアムか
奴は口だけのポンコツになって久しいよ
もう実装は無理
2019/10/28(月) 18:32:21.08ID:yqfr49c7
Yコンビネーターも辞めたとかなんとか…
詳しく知らないけど、引退かな?
2019/10/30(水) 22:48:20.29ID:WFzgvujE
ポール・グレアム (54歳)
庵野秀明 (59歳)

引退するような歳か?
2019/10/30(水) 23:12:22.65ID:LqrGiWFj
ポールグレアムそんなに若いんか
2019/10/31(木) 22:39:19.62ID:2PR/MUI3
arcだかはどうなったの
まあどうでもいいんだけど
2019/11/08(金) 14:53:51.74ID:qQX8Hix+
グレアムは金には困らんのだから残りの人生は全部が趣味みたいなもんだろ。
引退もクソもねぇよ。
2019/11/08(金) 18:39:03.97ID:S2qBNw07
おらもLisp書いてカリフォルニアで城買うだ
2019/11/09(土) 02:36:07.91ID:NblRK941
才能もねぇ金もねぇお巡り毎日ぐーるぐる
2019/11/09(土) 15:47:48.43ID:H0dhk6wi
闇の書を永久封印するために暗躍しているのかもしれん。
2019/11/09(土) 18:42:51.61ID:PzSjhCYo
テレビもねえ
2019/11/10(日) 01:15:03.78ID:PX+YDh/3
>>127
それはギル・グレアム提督だろ!
2019/11/10(日) 01:51:30.40ID:a/xfENId
fooもねえ、barもねえ
hyperspecナニモノだ
2019/11/10(日) 06:23:28.13ID:hnRZ9wTQ
グラハムはハーバード、MIT人工知能研、イタリアの美術大出てるんでしょ?
アメリカの大学は学費も相当かかる
ビジネス始める前から「普通の奴等の上」を行ってる人なんだと思うなぁ
頭さえ良ければ、とか思うかもしれないが環境、友人は大事だよ
ビアウェブのパートナーはMITの教授だよね、確か
2019/11/10(日) 14:00:02.99ID:jFIdfEKQ
いまPLAIの8章をよんでいるんだけど、次のExerciseの不変条件と言うのがよく分からん・・
ttp://cs.brown.edu/courses/cs173/2012/book/mut-struct-vs-var.html#%28elem._%28chunk._~3cms-setbox.C-case~3e~3a1%29%29

ソースコードはこれ https://bitsend.jp/download/d7ebf31e84a7dc5d8b55a3e3b66ce803.html

Storeに束縛を追加するのはbox、その束縛を参照するのはset-box!とunboxだけだから、
set-box!を評価するときに、ロケーションがStoreに存在しないことは無いように考えているんだけど、もっと数学的に
証明しなきゃいけないんですよねこれ・・
133デフォルトの名無しさん
垢版 |
2019/11/18(月) 17:16:59.42ID:D69b6YL7
Emacs hy-modeがバグってて動かない
2019/11/22(金) 03:17:25.81ID:LHM1yudT
Lispworks 8いつ頃出ると思う?
135デフォルトの名無しさん
垢版 |
2019/12/06(金) 00:43:20.37ID:KafRVWs2
$ ros run
* (+ 31000 33500 1000 2300 16500 300 1000 10100)
64700

おいおい,なんだこのメチャクチャな値
こんなんじゃ,まったく信頼できないんだが
どうなってんだ
しかも再現できないし

$ ros version
roswell 19.09.12.102(NO-GIT-REVISION)
136135
垢版 |
2019/12/06(金) 03:21:18.04ID:KafRVWs2
正しい値は 95700 なのだが
(- 95700 31000)
が 64700 になることに気づいた

最初の引数,抜かしてんじゃん...
REPL の + 関数,バグってるんだが

それとも WSL がいけないのか? tmux がいけないのか?
137135
垢版 |
2019/12/06(金) 04:20:18.39ID:KafRVWs2
$ ros run -- --version
SBCL 1.5.5
2019/12/15(日) 17:37:59.94ID:jthcUe0A
Gauche の 0.9.9 がリリースされたよー
139_
垢版 |
2020/01/17(金) 14:26:20.97ID:ceaCkwJJ
Guile 3.0 でたよー JIT化されたのが一番大きいかも
https://lists.gnu.org/archive/html/guile-devel/2020-01/msg00080.html

SBCL も 2.0 になったよー 久しぶりに Windows のインストーラーも更新されてるね
http://www.sbcl.org/news.html
2020/01/17(金) 16:25:06.09ID:TQsEbuhA
Ypsilon の派生で R7RS にも対応した処理系が出た!

https://github.com/fujita-y/digamma
141_
垢版 |
2020/01/17(金) 18:22:11.13ID:ceaCkwJJ
>>134
Lispworks 8 でる情報あったんですか?
てっきり次は 7.2 かと。
142_
垢版 |
2020/02/14(金) 11:14:07.86ID:m79sNhAX
Racket 7.6リリースされたよー
https://blog.racket-lang.org/2020/02/racket-v7-6.html

Chez Schemeの取り込みが進んで、プロダクション・レディになったそうな。
デフォルトにはまだなっていないようです。
2020/02/14(金) 20:28:20.26ID:xdYnDj0z
Chezか
スレッデドコードとか懐かしいな
144デフォルトの名無しさん
垢版 |
2020/02/14(金) 23:19:09.23ID:2TRtlmBi
SICPを勉強したくてschemeを一通り勉強したけど
schemeが本当に好きになった
綺麗な言語だなと思ったのはschemeが初めて
2020/02/15(土) 13:53:27.59ID:cwLPNCdO
Chez はパッケージマネージャがなぁ……。
2020/02/18(火) 22:12:38.88ID:i+WlpfA0
SICPで4.4論理プログラミングがでてきたけど、論理プログラム言語(Prolog)なんて
一生使わんのじゃないのか・・・?俺みたいな雑魚PGは特に。
そもそも俺はなんでインタプリタ作ってるんや・・・
2020/02/19(水) 11:52:11.74ID:mcS2XXQq
>>146
SICP はコンピューターサイエンスの本だから、
いろんなパラダイムについて説明しているよ。
知ってれば便利なこともあるとは思うけど、
必ずしも日常的に役立つというものでもないのも確か。
2020/02/19(水) 13:12:57.48ID:YsbctBnB
prologはともかくユニフィケーションはパターンマッチでたまに使うかも
2020/02/22(土) 11:13:35.82ID:dEZr6bBq
歴史、哲学、思想を勉強しても目の前の仕事には直結しない
みたいなことなのかな
2020/02/22(土) 11:15:49.62ID:dEZr6bBq
PrologはSQLに近い(同じ?)という人もいるね
2020/02/22(土) 12:07:02.06ID:5jIrjfcF
事実を列挙すれば解を求める処理をやってくれるってのは理想のひとつではあるよな。

実際にはには Prolog が答えを出すメカニズムを理解していないと
答えを (効率的に) 出しやすい事実を上手く与えられない場合もあるし、現実は厳しい……。
2020/02/22(土) 21:37:13.68ID:dEZr6bBq
思うんだけどLispというと悟りとか、ゲーデル云々みたいな話がよく言われるけど
Prologではあんまり関連付けて言われないですよね
2020/02/29(土) 16:53:01.80ID:RQUlgixi
上にもあるけどprologは論理がそのままプログラムになるっていわれてんだろ
似たようなもん
154デフォルトの名無しさん
垢版 |
2020/03/03(火) 08:38:08.45ID:VyHc4g1O
hy面白いけどlisperにはrubyの方が人気なんだ
2020/03/03(火) 12:21:06.15ID:t7WQy2vJ
んなこたーない
2020/03/03(火) 18:09:46.41ID:wrUSgHR4
>>152
> Prologではあんまり関連付けて言われないですよね

Prologは「論理プログラミング言語」と呼ばれたりするけれど書かれたプログラムを実行可能にするためのプログラミング言語であるために
論理のための言語(つまり論理式を記述するための言語)とはかなり違ってしまっているからね

その典型がPrologで動くプログラムを書く上で不可欠なカット “!” ね
あれは本来の論理には対応物がなく論理とは全く縁のないコンストラクトだが
カットを使わなければほとんどのPrologプログラムはまともに動かなくなってしまうだろう

その点、Schemeから命令的な言語コンストラクトおよび標準手続きであるset!とset-car!, set-cdr!を除いた部分は
弱い(weak, つまりλ抽象の本体式中のβ-簡約基(redex)は簡約せずに放置しておく)
作用的順序(applicative order)の評価戦略(reduction strategy)のλ計算そのものだ

call-ccは継続(continuation)というメタな(つまり意味論上の)値を対象レベルに持ち込むmeta-circular的な拡張であり
Schemeに限らずLisp一般で広く採用されているS-式という構文は自分の構文に対する抽象構文の表現になっているから
プログラムが自分自身(や同じ言語で書かれた他のプログラム)のソースコードを記述している言語を対象言語として
自分自身がそれを素直な形で操作できるメタ言語レベルの存在として振る舞えることになるからね

言い換えればS-式という表現形式のために括弧をやたらと多用させられるLisp言語では
ソースコードをその抽象構文(木構造)と同型な形で記述させていると言っても良い

だからLispのプログラムをLispで処理する場合には、C等のような普通のプログラミング言語で書かれたプログラムを処理する場合には
不可欠な字句解析や構文解析が実質上は不要なんだよ

何故ならば処理する側のLispプログラムにとって処理される側のLispコードは最初から抽象構文木と1:1対応する形式で提供される訳だから

正にゲーデルの不完全性定理で行っている形式化された論理のゲーデル数による表現とそれを原始再帰的函数や同述語を含むメタ論理のレベルで
処理する構造が、Lispの世界に対応していると言えるわけですよ
2020/03/03(火) 18:41:29.86ID:2IitENiP
3文字で頼む
2020/03/03(火) 19:41:28.30ID:nd3HjawW
マクロ
2020/03/03(火) 20:29:22.74ID:44YhJRv6
要するにPrologはメタ論理レベルのプログラミングが出来ないってこと?
2020/03/03(火) 21:31:50.71ID:s8qGwiQH
>>157
ボイド
2020/03/03(火) 21:44:08.09ID:JAknlLuJ
>>157
GEB
2020/03/04(水) 12:43:41.99ID:XYd2gLmT
CDR!!
163デフォルトの名無しさん
垢版 |
2020/03/04(水) 12:50:19.65ID:ujdXlrHA
SECD
Landin’s J
2020/03/05(木) 20:29:29.92ID:h922Dn8C
>>50
需要の問題だろ
Lisp自体がマイナーで
Common Lispでやっと本が出せる位なのに
2020/03/05(木) 20:29:51.26ID:h922Dn8C
>>53
今はAIといえばPythonだろ?
2020/03/05(木) 20:30:44.79ID:h922Dn8C
>>54
昔の一時期は妥当だったんだろうけど
今ならPythonの方が向いてるだろう
2020/03/05(木) 20:32:32.21ID:h922Dn8C
>>57
>>58
要は人工知能というより記号処理なんだよ
2020/03/05(木) 20:34:42.44ID:h922Dn8C
>>82
>>84
MITの件もあるし
今ならPythonでいいでしょ

MITレベルの頭ならLispなんて
すぐ読み書きできると思うが
2020/03/05(木) 20:39:40.49ID:h922Dn8C
>>146
>論理プログラム言語(Prolog)なんて
ほとんどのプログラマが
仕事では一生使わないだろうな?
でも設計をする上で参考になる
2020/03/05(木) 20:41:41.16ID:h922Dn8C
>>149
Prologの勉強は無駄ではないと思うが
すぐ成果には結びつかないだろうね?

でも長期的には流行りの言語やFWに飛びつくより
地力につながる可能性もあるだろう
2020/03/05(木) 20:42:43.57ID:h922Dn8C
>>150
宣言型という点では近いけど言語としては同じじゃない
ユニフィケーションやバックトラックの挙動があるから
2020/03/05(木) 20:44:54.71ID:h922Dn8C
>>151
AIはディープラーニングが主流になったが
それはそれとしてアレでPrologがもう少し
分かりやすければ日常的に使うんだけどな
これどうやって書くんだってのが多すぎる
2020/03/05(木) 20:47:20.68ID:h922Dn8C
>>156
Lispはメタプログラミングしやすいって理屈は分かるが
実際にそれでものすごい作業効率が上がるかは疑問だな?

なぜんあらメジャーな言語はライブラリが充実してて
それ使えば最初から書かなくても済むわけだから早い
2020/03/05(木) 20:48:56.47ID:h922Dn8C
>>159
本当にできるかできないかは知らんが
そういえばメタプロやってるって
声ほとんど聞いたことないな
Lisp勢はマクロマクロうるさいのに
2020/03/05(木) 23:31:57.86ID:ilhNvGHV
3文字で頼む
2020/03/06(金) 05:04:10.79ID:nWpA6pnf
スレチ
177デフォルトの名無しさん
垢版 |
2020/03/10(火) 18:23:23.35ID:BcZoFSIR
hy
マクロの入力にpair入れたのに
マクロ実行時にunquoteするとlistに化けるバグがある気がする
2020/03/26(木) 18:40:18.93ID:jDMenf5s
日本の理系人のLisp好きは異常
2020/03/26(木) 21:06:12.72ID:x3TTE31H
土日はおとなしくLispでも
2020/04/24(金) 18:37:15.78ID:3QH+ANBn
Clozure CL 1.12 がでてきた。
https://github.com/Clozure/ccl/releases/tag/v1.12

ぜんぜん 1.11 からバージョンあがらないから死んじゃったのかと思ったよ。
2020/04/24(金) 19:04:52.05ID:aAxBS6wC
死んでるんじゃない
枯れてるんだ😡
182180
垢版 |
2020/04/25(土) 00:16:26.67ID:iXfl78KC
>>181
ごめんなさい

ECL(Embeddable Common-Lisp)もバージョンアップしてた。
16.1.3から20.4.24になってる。
まだトップページ更新がないけど……。
https://common-lisp.net/project/ecl/index.html

変更点は以下
https://gitlab.com/embeddable-common-lisp/ecl/-/blob/20.4.24/CHANGELOG
2020/04/25(土) 01:57:04.26ID:u9oymkho
>>180
キタ━━━━(゚∀゚)━━━━!!
2020/04/25(土) 07:07:50.62ID:q++AEQsZ
小学校でlispを教えたらいいのに
185182
垢版 |
2020/04/25(土) 13:34:52.97ID:tfHLOmTJ
News が更新されたよ。
https://common-lisp.net/project/ecl/posts/ECL-20424-release.html
186_
垢版 |
2020/04/28(火) 00:30:29.10ID:moc7J10E
SBCL 2.0.4 リリースされたよ。RISC-V プロセッサに対応したのが目玉みたいだよ。
http://www.sbcl.org/news.html#2.0.4
2020/04/28(火) 11:03:05.28ID:jkGkDNpV
Scheme の map 手続きについて、
手続きを適用する順序 (副作用が発生する順序) は仕様上は未規定ということになっています。
各処理系として保証するということは有りえるんですが、
Racket の場合は保証されていると読み取って良いでしょうか?

https://docs.racket-lang.org/reference/pairs.html?q=map#%28def._%28%28lib._racket%2Fprivate%2Fmap..rkt%29._map%29%29

わざわざ "from the first elements to the last" という書き方をしているからには順序を意図しているように
解釈するのが自然かとは思うんですが、単に範囲を言っていると解釈できなくもないので、
英語と Racket に明るい方がいればご教示賜りたいです。
188_
垢版 |
2020/04/28(火) 14:05:01.63ID:moc7J10E
>>187
racket使ってるわけでも英語ができるわけでもないけど。
最初から最後までって範囲の話してるんじゃなかろうか。
順序の保証があるなら IN ORDER とか付きそうな気がする。
2020/04/28(火) 14:43:15.44ID:jkGkDNpV
>>188
R5RS などでは手続きが各要素に適用される dynamic order は unspecified である
というような表現になってるんですよ。 order という語が主語になってます。

https://docs.racket-lang.org/r5rs/r5rs-std/r5rs-Z-H-9.html?q=map#%25_idx_580

だからわざわざ変えた表現をするからには違うこと (順序が保証される) を言おうとしているんだろうと思いつつも、
明確に順序を強調してるわけでもないな……? というところで解釈に迷ってました。

私は R5RS (など) と言い回しが違うという点に引きずられていましたが、
"from the first elements to the last" というフレーズ単体で見ると範囲のニュアンス
で捉える方が自然ですかね。

私自身はいずれにしても map の副作用の順序に期待しないんですが、
しばらく前に Qiita に投稿されていた記事の中で map の順序が効いてくるコードがあったので、
これってありなんかなぁと思ったという経緯です。
2020/04/29(水) 01:16:58.58ID:y02v3tEE
>>187
保証とはどういうことを指しているのだろう
将来仕様を変更しないとは書いていないのは確かなようだ
racketでは引数の評価もleft to rightとは書いてあった
schemeでもfor-eachは先頭から順番に評価する
実際に評価順の違いが観察できるのはchezかな
2020/04/29(水) 03:18:21.69ID: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ユーザとの約束の順守を保証せねばならない)、ということだ。

当然ながら、言語仕様書のバージョンが変われば約束(つまり言語仕様による規定の内容)も変更され得る。
2020/04/29(水) 06:44:54.55ID:bLWOmnfL
>>187
処理系によって(A B C)の評価順序が
(1 2 3)だったり(3 1 2)だったり(3 2 1)だったりするから
mapのようなリストで処理結果を返すような関数のクロージャ内では原則副作用は起こさないことが求められる
for-eachみたいな初めから副作用を期待する関数はどう並べようが問題は起きない
2020/04/29(水) 09:21:45.86ID:sxS/u8Yc
>>192
それは承知しているのです。
ここでは Racket のドキュメントをどう解釈すべきかというのが論点です。

>>191
> 最初の要素から最後の要素へと適用すると書いてある

順番に (in order) とは書いていません。
順序が意味を持つ箇所ではおおよそ order という語で強調しているのに
それがないここでも順番であることを確信してよいほどに
(英語のニュアンスとして) 自明でしょうか。
2020/04/29(水) 09:54:06.36ID: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 についてはこういう制約は書かれてはいないものの、
順序は規定しないという文言は「既定はしないけどなんらかの順序を想定する」
とも読めなくもないので並列化を許しているとは言い切れない気がします。

副作用がないときに限っては並列化しても仕様に反しないのは間違いないですけど、
その場合は順序に関して有るとも無いとも書く必要がないんですよね。
どうせ観測できないので。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況