Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Prolog-添加列表编号_List_Prolog_Add - Fatal编程技术网

List Prolog-添加列表编号

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]匹配,这并不意味着什

为了学习这门语言,我试图解决一些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]
匹配,这并不意味着什么。您应该进一步处理
[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).