kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

定理証明手習い (70) lookupからapp-arity?まで

(lookup name defs) defsからnameの定義を探す

見つからないときはnameを返す
ちょっと不思議な仕様だけど役に立つのかな

おっとここでvar?を定義し忘れてることに気づいた

var? 変数かどうか

'tでも'nilでも数でもなくてアトムなら変数
ということは'()も変数になっちゃうけど
いいの?

undefined? 未定義かどうか

var?を使ってるので'()で試す

> (undefined? '() (list (defun-c 'add '(x y) '(+ x y))))
t
> (undefined? '() (list (defun-c '() '(x y) '(+ x y))))
nil

とりあえず破綻はしてないかなあ
とはいってもこういう使い方はしないよ、ってことでしょうね
Common Lispだったらたぶん結果が違う

(arity? vars es) リストの要素数が一致しているかどうか

ここから呼ばれてるarity?は本では定義されてませんでした
やっぱ全ソースは載ってなかったか
j-bob.scmを参照
載ってない分はどれくらいあるのか

(args-arity? def args) 関数の仮引数のリストと実引数のリストの要素数が一致しているかどうか

組み込み関数の面倒も見てくれます
ユーザ定義関数はタグ付きで渡されるけど
組み込み関数は単なるシンボルで渡されるみたいですね

dethmは仲間はずれ
別扱いにしないとよくないのかな?
数をチェックしたくなることはありそうな気がするけど

(app-arity? defs app) 関数適用の仮引数のリストと実引数のリストの要素数が一致しているかどうか

lookupが見つけられなかったら名前を返す仕様と
args-arity?が組み込み関数をシンボルで受け取る仕様はここで生かされてました
組み込み関数はdefsに含まれてませんのでlookupは名前を返し、
app-arity?がそれをそのままargs-arity?に渡すと
args-arity?がうまいことやってくれると

ふむふむ