prolog中的向量加法

prolog中的向量加法,prolog,Prolog,我正在写一个谓词来添加两个向量。这就是我想到的: add( [], [], 0 ). add( [A], 0, A ). add( [A], [B], C ) :- C is A + B. add( A, B, C ) :- add( B, A, C ). add( [H1|T1], [H2|T2], WYNIK ) :- X is H1 + H2, add( T1, T2, Y ), append( [X], Y, WYNIK ). 前四行工作正常,但我无法让最后一行工作-我做错了什么?按照

我正在写一个谓词来添加两个向量。这就是我想到的:

add( [], [], 0 ).
add( [A], 0, A ).
add( [A], [B], C ) :- C is A + B.
add( A, B, C ) :- add( B, A, C ).
add( [H1|T1], [H2|T2], WYNIK ) :- X is H1 + H2, add( T1, T2, Y ), append( [X], Y, WYNIK ).

前四行工作正常,但我无法让最后一行工作-我做错了什么?

按照这种顺序,最后一行永远不会运行。该行:

add( A, B, C ) :- add( B, A, C ).

将与上面的规则尚未处理的任何内容统一起来。

正如Jeff所观察到的,问题在于规则:

add( A, B, C ) :- add( B, A, C ). 你的add谓词有点奇怪:
add([1],0,1)
是真的,就像
add([1],[0],1)
一样,但是
add([0],1,1)
不是,也不是<代码>添加从计算的角度来看非常有意义,但它真的是您想要的吗

add (0, [A], A).