Это НЕ домашнее задание --, решение уже есть в тексте. Я просто не понял решения.
(run* (q)
(let [a (== true q)
b (== false q)]
b))
(false)
()
Очевидно, что строка «a (== true q )» НЕ выполняется, так как целью является только b. Это меня смущает. До сих пор моя ментальная модель логического программирования была:
выводить те, которым удается пройти через всю программу
Таким образом, «a (== true q )» заставляет q = true, что делает невозможным выполнение строки «b (== false q )».
Однако, по-видимому, выполняются только «вещи, необходимые для вычисления цели». Что происходит? Какова правильная модель умственного исполнения для core.logic/mini -kanren?
Спасибо
(Кстати, я явно не прав, так как mini-karen + core.logic согласуются друг с другом --Я просто хочу понять, что я делаю не так.)