#prolog
Вопрос:
допустим, у меня есть;
goal(A,B) :- goal1(A,C), goal2(C,B).
но теперь, скажем goal(c,b)
, нельзя сделать вывод.
Если я запрошу, goal(c,b)
то получу истину, но если я запрошу goal(a,B)
, то не получу B=b
, потому что это даже не проверяется goal2(c,b)
(поскольку это невозможно вывести). Он просто проверяет все имеющиеся факты goal2(C,B)
и выбирает только те, которые являются ложными.
Вот в этом-то и проблема. Я хочу, чтобы B=b
в качестве ответа, когда я спрашиваю что-то вроде goal(a,B)
. Возможно ли это в прологе. Обратите внимание, что я не хочу вставлять отрицательный факт, как goal(c,b):-false
в прологе.
Спасибо.
Комментарии:
1. Не могли бы вы попытаться привести рабочий пример? Например, приведите примеры определений для целей 1/2 и 2/2, а также запросов, которые вы хотите использовать.
2. Хорошо, более простой пример @TA_intern : — У нас может быть определенное отношение «отец/2», несколько фактов. Тогда я хочу знать всех людей, чей отец не «а». Так что-то вроде ? -не отец(а,Х). Тогда я думаю, что задача состоит в том, чтобы определить не father/2. Потому что,если я определю не отца(A, B) :- отец(A,B). возникает та же проблема
3. В принципе, если есть способ, пролог заменяет все константы, определенные в базе данных, в правило отрицания для проверки, вместо того, чтобы использовать только существующие выведенные правила для проверки. Тогда это может сработать. Я думаю, теперь вы знаете, в чем проблема.
4. Не могли бы вы написать это в вопросе? Действительно трудно понять код, который я не могу скопировать, вставить и запустить на своем компьютере.
Ответ №1:
Пытаясь угадать из вашего вопроса, скажем, что у нас есть:
p(a, 1).
p(c, 2).
p(d, 1).
p(e, 2).
и вы хотели запросить все p/2, где второй аргумент не равен 2, вы можете либо сделать:
?- p(X, Y), Y == 2.
или:
?- dif(Y, 2), p(X, Y).
Прочитайте документы, чтобы понять, в чем разница. Здесь есть много вопросов, так что обсудите это.
Комментарии:
1. Эй, кажется, это работает для меня:). Спасибо. Поэтому идея в том, что если я хочу проверить «все константы», определенные в базе данных, они должны быть в каком-то факте. Затем я хочу использовать эти факты для проверки этой константы.
2. @Tojrah, я не знаю. Мне действительно трудно понять без примеров кода 🙁