Lisp Scheme Part41 (889レス)
上下前次1-新
抽出解除 レス栞
5: はちみつ餃子 ◆8X2XSCHEME [sage] 2018/07/29(日) 18:08:39.36 ID:bQEgGaK2(1) AAS
Racket の 7.0 が出た。
コアを chez に置き換える方向で進んでるんだね。
23: デフォルトの名無しさん [sage] 2018/11/20(火) 01:03:10.36 ID:Bz9DRyU5(1) AAS
そんなとこにいたら頭がガベージまみれになるぞ
64(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/23(土) 23:08:12.36 ID:ByL/s3eU(1) AAS
>>6363(3): デフォルトの名無しさん [] 2019/03/23(土) 22:34:59.05 ID:xopjuNQ8(1) AAS
Scheme というか、Lisp のことを少ししか分かっていないんですども、μKanren を使ってみたくて
Sheme の処理系をインストールしたんですが Gauche、Guile、MT/GNU Sheme と、入れた全部
に assp がアンバウンドだと言われて動きません。
1.解決方法が分からなくて、自前で assp を書いて動かしてますが、本当はどうやったら assp が
使えるか教えてください。ライブラリをロードするのでしょうか?
2.せっかく書いたので、自前の関数の働きが本当の assp と同じなのか知りたいです。
みなさんならどのように書きますか? 最初に見つかったときに止める場合のセオリー
はありますか?
書いてみた関数:
(define (assp fn assoc)
(let ((rtn #f))
(for-each (lambda (x)
(if (not rtn)
(if (fn (car x))
(set! rtn x))))
assoc)
rtn))
μKanren のことはよくしらないけど、
assp は R6RS (※1) では rnrs lists ライブラリに含まれるので、
R6RS 処理系ではこのライブラリを import すると使えるようになる。
R6RS 以外には無い。
自分で書くとしたら SRFI-1 (※2) を使える状況なら
こんな感じで書くなぁ
(define (assp proc alist)
(find (lambda(x)(proc (car x)))
alist))
※1
RnRS は Scheme の仕様書の通称。
n に改定番号が入る。
※2
小さい言語である Scheme では日常的に使うにはライブラリが足りなさげなので、
ユーザーコミュニティとしてライブラリの仕様を考えて文書化したものの集合体が SRFI 。
(RFC みたいな感じ?)
SRFI-1 はその最初期のもので、リスト操作系のライブラリ。
仕様の一部ではないので処理系によって SRFI の採用の程度は色々だけど、
実用嗜好の処理系は主要なものはまあまあ取り込んでいる。
今では仕様の検討の前段階として一旦 SRFI にしたりもしている。
194(2): デフォルトの名無しさん [sage] 2020/04/29(水) 09:54:06.36 ID:sxS/u8Yc(2/3) AAS
>>191191(2): デフォルトの名無しさん [sage] 2020/04/29(水) 03:18:21.69 ID:ALOjMFFX(1/2) AAS
>>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ユーザとの約束の順守を保証せねばならない)、ということだ。
当然ながら、言語仕様書のバージョンが変われば約束(つまり言語仕様による規定の内容)も変更され得る。
> 長大なリストに対する並列処理を可能にするためだろう
手続きの引数の評価順序については未規定ではあるものの
"some sequential order of evaluation" という制約がついています。
外部リンク[html]:docs.racket-lang.org
ちょっとわかり難いんですが、これは「同時ではない (かのように動作する)」と解されるそうです。
たとえば
(list (begin (display 'a) (display 'b) 1)
(begin (display 'c) (display 'd) 2))
とあったときに表示は abcd か cdab のどちらかであり acbd だったり cabd だったりはしない
ということです。
map についてはこういう制約は書かれてはいないものの、
順序は規定しないという文言は「既定はしないけどなんらかの順序を想定する」
とも読めなくもないので並列化を許しているとは言い切れない気がします。
副作用がないときに限っては並列化しても仕様に反しないのは間違いないですけど、
その場合は順序に関して有るとも無いとも書く必要がないんですよね。
どうせ観測できないので。
252: デフォルトの名無しさん [sage] 2020/11/28(土) 21:43:05.36 ID:IG5x2Tcu(1) AAS
みんな、fletとかlabels使うの?
俺全然使わないんだけど。
324: デフォルトの名無しさん [sage] 2021/02/23(火) 02:25:08.36 ID:VIkkm8/q(1/3) AAS
関数がリストで表せるからatomじゃないってのは気持ち悪いな
別にどんな言語であろうと関数定義はトークンの並び≒リストで書けるわで
論理学では関数や述語はそのシンボルと引数のリストとして書かれるにも関わらずatomと定義される、あんまり明るくないんでなんでそうするのかは知らんが
496: デフォルトの名無しさん [sage] 2022/01/05(水) 01:55:05.36 ID:M/mCn8xE(1) AAS
1.0 で Stabilize と書いてはいるが、別に現状の動作が不安定で落ちたりするという意味じゃなくて
API の試行錯誤とかをやってたのを 1.0 では「とりあえずの」決定版にしようねという話であって、
後にもたまには大きな変更だってあるだろうし、そのへんの感覚は番号だけ見てもわからんのだよな。
むしろメジャーバージョンが変わった直後は不安定という通説もあるし。
メジャーバージョンがクソデカでも信用ならんものなんて腐るほど見てきただろう?
心理的な障壁というのはわかるんだけど、逆に言えば気分の問題でしかない。
検証した上でやっぱりアカンとなったならしょうがないんだけど、
バージョンナンバー「だけで」判断してるのならよい態度ではないよね。
506: デフォルトの名無しさん [sage] 2022/01/16(日) 22:33:47.36 ID:UU19DhdN(1/2) AAS
同じく
あと、リスト遊び読む
793(1): デフォルトの名無しさん [] 2025/07/13(日) 23:42:36.36 ID:2niGmUKn(1/2) AAS
はちみつがすでに指摘してることを延々とくりかえすのはスレの住人の大半が理解できてないってことか?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.411s*