У меня есть эта часть кода как базовый регистр в рекурсивном предикате.Почему пролог не распознает аргументы в запросе?
riduci_lista_valori([[V, N]],m_var,Lr):-
member(V, m_var),
Lr =[N].
Проблема заключается в том, что, когда я выполняю мой запрос не унифицировать правильно аргументы предиката с его параметрами.
Учитывая код, мой запрос: riduci_lista_valori([[a, 5]], [c,e], F).
И я ожидаю, что Prolog вернется F = [5]
. Отладка кода кажется, что он не признает должным образом аргументы, потому что он не объединяется: V = a
, N = 5
m_var = [c,e]
, но он дает: 1 = [[a, 5]]
и 2 = [c, e]
.
В то время как, если я подскажу: [[V, N]] = [[a,5]].
это правильное объединение: V = a
, N = 5
.
Что я делаю неправильно? Спасибо!
Спасибо за ваш ответ, я узнал что-то новое о декларативной debbugging. Но ваша последняя линия спасла мою ночь :) –
s (X), какая потрясающая идея! –
Не могли бы вы включить ссылку, которая объясняет \ расширяет 'декларативную отладку' в отношении Prolog; особенно использование op (920, fy, *). Это хорошая техника, которую я хотел бы включить в свою панель инструментов Prolog. Если вы хотите, чтобы это как отдельный вопрос, просто спросите. Возможно, это должен быть тег со ссылками, например [tag: failure-slice] –