Recursion Prolog和所有抛出错误

Recursion Prolog和所有抛出错误,recursion,prolog,sum,Recursion,Prolog,Sum,我必须编写一个谓词,对列表中的所有项求和。项目可以是一个包含列表的列表。例如 sum1([1,[2,3],4,[5]],X)。 我有一些应该可以工作的代码,但是给出了一个参数没有充分实例化的错误。我对prolog很陌生,但这些看起来不错。这是我对这个谓词(函数)的完整代码 更改以下两个条件的顺序:S2是H+X,suml(T,S2)并更改使用方式is/2。虽然这是逻辑编程,但规则中条件的顺序很重要。首先放置sum1(T,S2),因为在计算总和之前需要实例化S2。其次,is对右部分进行算术计算,并将

我必须编写一个谓词,对列表中的所有项求和。项目可以是一个包含列表的列表。例如 sum1([1,[2,3],4,[5]],X)。 我有一些应该可以工作的代码,但是给出了一个参数没有充分实例化的错误。我对prolog很陌生,但这些看起来不错。这是我对这个谓词(函数)的完整代码


更改以下两个条件的顺序:
S2是H+X,suml(T,S2)
并更改使用方式
is/2
。虽然这是逻辑编程,但规则中条件的顺序很重要。首先放置
sum1(T,S2)
,因为在计算总和之前需要实例化
S2
。其次,
is
对右部分进行算术计算,并将其与左部分统一起来。因此,您实际上想要将
S2
H
相加,得到
X

suml([H|T],X) :- atomic(H), suml(T,S2), X is H + S2.

再次感谢你!我尝试了第二行,但它不起作用suml([H | T],X):-suml(T,X),suml(H,S1),S1+X。基本上这是说,如果我有一个列表,求和并添加它。但这不起作用,我得到了未定义的过程VM!我错了,我被我自己的代码中的X搞糊涂了,因为老师有例子……我现在得到了它,应该是suml([H | T],X):-suml(T,S1),suml(H,S2),X是S1+S2。
suml([H|T],X) :- atomic(H), suml(T,S2), X is H + S2.