在Prolog中,用列表中的任意数字(如8)替换1的前K个匹配项

在Prolog中,用列表中的任意数字(如8)替换1的前K个匹配项,prolog,xsb,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) , Re

将数字的前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时才起作用。有人能告诉我这里怎么了吗

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] ).

这就是解决方案

@false你能帮我解决这个问题吗??