【发布时间】:2014-10-21 21:53:54
【问题描述】:
我想写一个谓词find_difference([A|B],[P|Q],[C-D|E-F])来查找列表[A|B]和[P|Q]之间的区别,并给出类似[C-D|E-F]的结果,C表示变化发生在第N个子列表中,而@987654325 @ 表示更改发生在该子列表的第 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),而不是列表结果。 -
你对差异的理解是什么?从你的问题中不清楚。而是说明不同之处。
标签: prolog