最近在温习一些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).
有哪位聪明人愿意和我一起解决这个问题吗? :)