【发布时间】:2017-12-14 09:50:18
【问题描述】:
我想在 Prolog 的列表中将 b,c 替换为 x,y,z。我有一个列表[a,b,c,d,e,f],结果将是[a,x,y,z,d,e,f]。我怎样才能在 Prolog 中写这个?
replace([],_,[]).
replace([x|T1],Var,[Y|T2]):-
member(X=Y,var),
!
; X=Y
),
replace(T1,Var,T2).
-? replace([a,b,c,d,e,f],[b,c=x,y,z],R).
【问题讨论】:
-
您的程序中有印刷错误。另外,试试
write_canonical([b,c=x,y,z])。 Prolog 并不像你想象的那样看待这个术语。以列表表示法编写,它被视为:[b, =(c,x), y, z]。如果b,c在您的列表中出现多次怎么办?是否需要替换所有匹配项? -
这里有个提示:想一想如何使用
append/3 to判断一个列表P是否是列表L的前缀。 -
你的查询应该是
replace([a,b,c,d,e,f], [b,c], [x,y,z], R).是你给这个谓词的参数赋予意义的程序员。
标签: replace prolog substitution