Я хотел бы написать предикат find_difference([A|B],[P|Q],[C-D|E-F])
найти разницу между списком [A|B]
и [P|Q]
, и дать результат, как [C-D|E-F]
, C указывает на то, что изменения происходят в N-ом подсписка в то время как D
говорит, что изменения произойдет в N-м элементе этого подсписка (изменение в каждом подсписке будет только одним символом). Таким образом, запрос и ожидаемый результат будет как:Пролог в списке
find_difference([[a,b,c],[w,t]],[[a,b,d],[w,s]],X).
X=[1-3,2-2].
может предикат также иметь дело с переменными? Например:
find_difference([[A,B,C],[A,D]],[[A,D,C],[A,S]],X).
X=[1-2,2-2].
заблаговременно за любую помощь, которую вы можете предоставить.
find_difference([],[],1).
find_difference([A|B],[C|D],E):-
( A=C ->
find_difference(B,D,Y),
E is Y+1
; find_difference(B,D,E)
).
Теперь я могу получить только разные значения списка. Но если два списка совпадают, он будет отвечать на неправильный ответ. Кроме того, он не может справиться с переменными.
7 ?- find_difference([A,B,C],[A,B,D],X).
C = D,
X = 4.
Почему это?
Ваш заявленный желаемый результат - это список, но ваша попытка реализации явно имеет целочисленный результат ('E'), а не результат списка. – lurker
Что вы понимаете по разнице? Это не ясно из вашего вопроса. Скорее укажите, какая разница. – false