我在Prolog中相对较新。 我正在尝试将列表的所有元素相乘并相加,但它仅适用于一个元素。 怎么了?
%Basic
mult([],A,0).
mult([X|Xs],A,S) :-
mult(Xs,A,R),
S is (X * A),
S is S + R.
感谢您的帮助。
答案 0 :(得分:2)
问题出在行S is S + R.
上。在序言中,一个变量不能在子句主体内采用不同的值。在这里,您期望S
的值会发生变化,但这是行不通的(除非R
为0,在这种情况下,S
保持不变;因此为什么它已经适用于单个元素列表)。
您需要使用其他变量来存储中间结果,并且仅将输出变量用于最终结果。例如:
mult([], _, 0).
mult([X|Xs], A, S):-
mult(Xs, A, R),
Tmp is (X * A),
S is Tmp + R.
我也自由地修复了您得到的单例变量警告。尽管在这种情况下它是无害的,但您永远不应忽略它们,因为它们通常会指出有缺陷的逻辑。