List Prolog-添加列表编号
为了学习这门语言,我试图解决一些prolog练习,但在prolog列表中添加数字时遇到了问题 例如,我有一个列表[1,2,3],我想把它作为输出编号6 我写了这段代码,但它不起作用List Prolog-添加列表编号,list,prolog,add,List,Prolog,Add,为了学习这门语言,我试图解决一些prolog练习,但在prolog列表中添加数字时遇到了问题 例如,我有一个列表[1,2,3],我想把它作为输出编号6 我写了这段代码,但它不起作用 list_adder([H|T],S):- S is H + T. 有人能解释一下原因吗?试试这个: list_adder([ ],0). list_adder([X|L],Sum) :- list_adder(L,SL), Sum is X + SL. 这是因为示例中的H+T与1+[2,3]匹配,这并不意味着什
list_adder([H|T],S):- S is H + T.
有人能解释一下原因吗?试试这个:
list_adder([ ],0).
list_adder([X|L],Sum) :- list_adder(L,SL), Sum is X + SL.
这是因为示例中的
H+T
与1+[2,3]
匹配,这并不意味着什么。您应该进一步处理[2,3]
,如第四个答案所示。记住prolog是以递归方式工作的。您正试图将列表中的第一个元素添加到列表的其余部分。即,在[1,2,3]列表中,您试图添加1+[2,3]。该函数需要在列表的其余部分递归。
list_adder(L,X),
list_adder(L,[],X).
list_adder([],L,X) :-
length(L,X).
list_adder([N|R1],L1,X) :-
length(L,N),
append(L1,L,L2),
list_adder(R1,L2,X).