1
我是Prolog的新手,试图做一个辅助函数,该函数从列表中取2个元素,并创建一个向量。 例如:PROLOG谓词回答真或假,但不是所需的值
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的工作方式是通过术语的统一,你不能像程序语言那样“返回”,所以即时通讯咝声中的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我想谓词返回。
THX,不知道关于 “不能 '重新分配' 变量” – 2013-05-09 05:44:32