prolog - 仅替换列表中的第一个创建元素

时间:2018-03-09 02:38:01

标签: prolog


如何才能替换列表中的第一个元素? 我有这个例子:

replace(_,_,[],[]).
replace('-', NewChar, ['-'|T], [NewChar|T2]):- replace('-', NewChar, T, T2).
replace('-', NewChar, [H|T], [H|T2]):- H \= '-', replace('-', NewChar, T, T2).

结果是:

?- replace(-,o,[x,x,x,-,-,-],X).
X = [x, x, x, o, o, o].

但应该是:

X = [x, x, x, o, -, -].

非常感谢。

2 个答案:

答案 0 :(得分:0)

出于教学目的,制作 - 并因此调试 - 这样的基本实用程序谓词是一种很好的做法。一旦你掌握了基础,考虑一下瑞士军刀'列表处理 - 追加/ 3。

replace_first(OldEl, NewEl, OldList, NewList) :-
  append(H, [OldEl|T], OldList),
  append(H, [NewEl|T], NewList).

我认为最明显的关系方法最适合Prolog。

答案 1 :(得分:0)

最后我找到了解决方案。

?- select(-,[x,x,x,-,-,-],o,Y).

结果是:

Y=[x,x,x,o,-,-].

请参阅SWI Prolog - Select