首页 > 解决方案 > 序言替换列表中的元素

问题描述

我需要帮助以了解如何使用 [a(b,c),a(x,d)] change(S,K,R) 更改第一个列表 [a,c,b] 与第二个中给出的值列表 [c(a,x),c(b,y)]

?- change([a,c,b],[k(a,x),k(b,y)],R).
R = [x,c,y].

% 我的程序,但它适用于第二个列表,它是错误的列表元素类型 k(a,x) 但像 [a,x] 并且工作得有点差,如果我打印 R,则返回 True 而不是 R=x,c,y值是 [y,c,x|_2826] 我用 ?-change([a,c,b],[a,x,b,y],R) 调用我的代码。

change([],[],[]):-!.
change([],[],R):-write(R),!.
change([H1|T1],[],[H1|R]):-change(T1,[],R),!.
change([H1|T1],[H2,H3|T2],R) :-
   (  ( H1==H2 , change(T1,T2,[H3|R]) )
      ; ( H1\==H2, change(T1,[H2,H3|T2],[H1|R]) )
   ).

标签: prolog

解决方案


看起来你应该使用Association lists

SWI-Prolog 手册

和在线文档


推荐阅读