これは宿題ではありません。解決策はすでにテキストに含まれています。私はちょうど解決策を理解できませんでした。
問題
(run* (q)
(let [a (== true q)
b (== false q)]
b))
正解
(false)
私の信じた解決策
()
私の混乱
どうやら「a (== true q)」行は実行されません。なぜなら、b だけがゴールだからです。これは私を混乱させます。これまでのロジック プログラミングに対する私のメンタル モデルは次のとおりです。
- q へのすべての可能な代入を考慮する
プログラム全体をなんとか通過したものを出力する
したがって、「a (== true q)」は q = true を強制し、「b (== false q)」の行を満たすことができなくなります。
ただし、明らかに「目標を計算するために必要なもの」のみが実行されます。どうしたの?core.logic / mini-kanren の正しいメンタル実行モデルとは?
ありがとう
(ちなみに、mini-karen + core.logic は互いに同意するので、私は明らかに間違っています。私が間違っていることを理解したいだけです。)