【发布时间】:2015-06-19 04:15:55
【问题描述】:
我最近一直在复习一些 Prolog。我有点喜欢只是想出随机问题来尝试解决然后解决它们。不过,这个问题相当棘手,我不会放弃我已经着手解决的问题。
问题:我想做一个谓词,有2个预定列表,2个要交换的数字,然后在交换完成后输出列表。
进一步说明:我想从列表 1 中找到一个特定的唯一编号,并将其与列表 2 中的特定唯一编号交换,这样如果我有 2列出... [7,2,7,8,5] 和 [1,2,3,8,7,9,8],然后给谓词 2 个数字(假设是 8 和 7),然后是数字 8 和数字 7 将在列表之间交换 如果且仅当数字 8 在第一个列表中并且数字 7 在第二个列表中。 (它会忽略第二个列表中的 8 和第一个列表中的 7)。
具有预期答案的示例查询:
?- bothSwap([7,2,7,8,5],[1,2,3,8,7,9,8],8,7,X,Y).
X = [7,2,7,7,5], Y = [1,2,3,8,8,9,8].
我有点卡在这一点上:
bothSwap([],L2,N1,N2,[],L2).
bothSwap(L1,[],N1,N2,L1,[]).
bothSwap([H1|T1],[H2|T2],N1,N2,X,Y) :- H1 == N1, H2 == N2, bothSwap(T1,T2,N1,N2,D1,D2), append(D1,[H2],X), append(D2,[H1],Y).
bothSwap([H1|T1],[H2|T2],N1,N2,X,Y) :- H1 == N1, H2 =\= N2, bothSwap([H1|T1],T2,N1,N2,D1,D2).
bothSwap([H1|T1],[H2|T2],N1,N2,X,Y) :- H1 =\= N1, H2 == N2, bothSwap(T1,[H2|T2],N1,N2,D1,D2).
有没有聪明的人愿意和我一起解决这个问题? :)
【问题讨论】:
-
应该
bothSwap([7,2,7,8,5,8], [1,2,3,8,7,6,5,7,2], 8, 7, X, Y)是X = [7,2,7,7,5,7], Y = [1,2,3,8,8,6,5,8,2]吗?还是X = [7,2,7,7,5,8], Y = [1,2,3,8,8,6,5,7,2]?