Lisp Scheme Part41 (809レス)
前次1-
抽出解除 レス栞

63
(3): 2019/03/23(土)22:34 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))
64
(1): はちみつ餃子 ◆8X2XSCHEME 2019/03/23(土)23:08 ID:ByL/s3eU(1) AAS
>>63
μ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 にしたりもしている。
65: 63 2019/03/24(日)10:14 ID:UnbL980K(1) AAS
>>64
ありがとうございます。Gauche は find があるみたいなので、早速置き換えてみました。
Scheme の規格は、過去のものを包括しているわけでもなく、なかなか難しいものなんですね。

μKanren だけに限らないかもしれませんが、μKanren の Scheme のコードは、普通の
オブジェクト指向言語と違って型を作って使い分けするのでなくて、そういう意図でベクトルや
ドット対やリストを使い分けていたり、戻す値が何を意図したものなのかわかりにくくて、
短いけど難しいですね〜 
67: 63 2019/03/26(火)10:45 ID:qv9oqtep(1) AAS
>>66
μKanren や miniKanren はいろんな言語に移植されていますね。
実は私も、ある超マイナー言語に移植することでその言語の勉強と、移植したライブラリで
なんかしてみようと始めたんですけど、スタック系言語なんで、なかなかすんなりいきません。

あと、コア部分はいいとしても、Shceme でマクロを使っているところをどうするかって
ところが悩みどころ。他の言語の移植をみても、そのへんはつくってないものも多い様で。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.197s*