我是 Prolog 的新手,并且试图制作一个辅助函数,该函数从列表中获取元素,一次 2 个,并制作一个向量。例如:
L=[0,0,0,0,0,0,0,0], v_form([2,3,1,1],L).
L = [0,1,3,0,0,0,0,0] .
应该是这样的,但我得到了这个:
?- L=[0,0,0,0,0,0,0,0], v_form([2,3,1,1],L).
L = [0, 0, 0, 0, 0, 0, 0, 0] .
我的代码是:
replace([_|T], 0, X, [X|T]).
replace([H|T], I, X, [H|R]):- I > 0, I1 is I-1, replace(T, I1, X, R).
v_form([],R).
v_form([X,Y|Z],R) :- replace(R,X,Y,K), v_form(Z,K).
我发现这个“A 没有与规则正文中的任何内容统一。Prolog 的工作方式是通过术语统一。你不能像在程序语言中那样“返回”A”,所以我在我的谓词中猜测 R 是没有统一,但如果是这样的话,我不明白为什么我得到想要的值,当我改变时
v_form([],R).
我
v_form([],R).:- write(R).
得到:
?- L=[0,0,0,0,0,0,0,0], v_form([2,3,1,1],L).
[0,1,3,0,0,0,0,0]
L = [0, 0, 0, 0, 0, 0, 0, 0]
所以,如果我没有统一 R 是真的,为什么 wrtie(R) 不抛出错误/异常/打印 []/ 告诉我它不统一,或者那些行中的东西,而是写我希望谓词返回的 R .