仅显示语句中的差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅显示语句中的差异相关的知识,希望对你有一定的参考价值。
reservation("8V32EU", "John", "Doe", "27B", "YYZ", "CPH", "SAS").
reservation("8V32EU2", "Jane", "Doe", "27B", "YYZ", "CPH", "SAS").
reservation("94ISCU", "John", "Doe", "2C", "CPH", "YYZ", "SAS").
reservation("FDSDD3", "John", "Doe", "12D", "YYZ", "ROU", "SAS").
说我有这些陈述。
有一个小故障,约翰和简在同一航班上预订了同一个座位。 (前两个陈述)。如何编写返回双重预留席位预订代码的程序? (在这种情况下为“8V32EU”和“8V32EU2”)。我需要计算所有双重预订的预订代码
我到目前为止的尝试:
double_reservations(BookingCode, SeatNo, Fname, Lname) :-
reservation(BookingCode, Fname, Lname, SeatNo, _, _, _).
但是这只有在你给它有问题的座位时才有效:
double_reservations(BookingCode, "27B", _, _).
没有它有办法吗?只有double_reservations(BookingCode, _, _, _).
答案
我认为您应该将有问题的预订代码的识别分开,然后从预留/ 7表中恢复所需的任何细节:
double_reservations(BookingCode1, BookingCode2) :-
reservation(BookingCode1, _Fname1, _Lname1, SeatNo, OAir, DAir, Airline),
reservation(BookingCode2, _Fname2, _Lname2, SeatNo, OAir, DAir, Airline),
BookingCode1 = BookingCode2.
另一答案
你可以使用findall/3
或setof/3
来解决这个问题。这里使用findall/3
的解决方案:
getDouble([]).
getDouble([HS|TS]):-
findall(C,reservation(C,_,_,HS,_,_,_),LC),
length(LC,N),
( N > 1 ->
writeln(LC)
; true),
getDouble(TS).
solve:-
findall(S,reservation(_,_,_,S,_,_,_),LS),
sort(LS,L),
getDouble(L).
查询:
?- solve.
[8V32EU, 8V32EU2]
true
我使用findall/3
和sort/2
去除重复(read this),而不是setof/3
,因为如果目标没有解决方案,findall/3
将返回一个空列表,而setof/3
(和bagof/3
)将在这种情况下失败(link)。如果您不想删除重复项,可以使用msort/2
。
以上是关于仅显示语句中的差异的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell中的Compare-Object无法仅显示差异
Excel 公式或规则或 vba 比较 2 个单元格并仅突出显示差异