Нарисуйте след пролога - PullRequest
0 голосов
/ 27 мая 2018

Я учусь использовать пролог со списками, применять команду трассировки и сам рисовать трассировку бумаги, но я не очень хорошо понимаю, как отладка делает это со списками (без списков, если это так).У меня есть следующий пример программы.

p([X],X). 
p([X|L],Y):-p(L,Y). 
q([X,X]). 

, и я применяю запрос

p(V,2),q(V).

, и я получаю ребенка для консоли, это

Call: (9) p(_612, 2) ? creep
Exit: (9) p([2], 2) ? creep
Call: (9) q([2]) ? creep
Fail: (9) q([2]) ? creep
Redo: (9) p(_612, 2) ? creep
Call: (10) p(_902, 2) ? creep
Exit: (10) p([2], 2) ? creep
Exit: (9) p([_900, 2], 2) ? creep
Call: (9) q([_900, 2]) ? creep
Exit: (9) q([2, 2]) ? creep
V = [2, 2] ;

изатем цикл до бесконечности, но это не имеет значения для меня, потому что я не знаю, как получить решение V = [2, 2];

Делая соответствующие замены так, чтобы они объединялись, я получаю длялитерал p (V, 2)

[X] = L
2 = X
[X | L] = V
[2 | L] = V

Итак, я хочу знать значение V, поэтому у меня будет [2, [2]], и это можно перевести в [2, 2]?

Тогда я должен был бы проверить это для второго литерала q (V), который объединяет, так что это правильное решение.Это твои рассуждения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...