将第一个K出现的1替换为Prolog列表中的任何数字,例如8

时间:2018-04-28 03:34:49

标签: prolog xsb

将数字的前K次出现替换为任何其他数字。考虑1在这里被8替换。

这就是我的谓词的样子

 replace_first_k(3,[1,2,3,1,1,5,6,1,7],X).

它应该提供以下输出 -

E = [8,2,3,8,8,5,6,1,7]

这是我到目前为止编写的代码

replace(0,[], []).
replace(0,L,L).
replace(X,[H|T], Res) :-

     ( X > 0 , 1 \== H -> replace(X1,T, Res1) , Res = [H|Res1] 

    ; 1 == H,X1 is X - 1, replace(X1,T, Res1),  Res = [8|Res1] ).

它似乎只在我的第一次X次出现时才起作用。有人可以告诉我这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

replace(X,[], []).
replace(0,L,L).
replace(X,[H|T], Res) :-

     ( X > 0 , 1 \== H -> replace(X,T, Res1) , Res = [H|Res1] 

    ; 1 == H,X1 is X - 1, replace(X1,T, Res1),  Res = [8|Res1] ).

这是解决方案