Prolog有一个初始化为零的列表以使用sum

Prolog有一个初始化为零的列表以使用sum,prolog,Prolog,我想要一个谓词,在第一次迭代中有一个空列表,所以 示例(列表、结果):- 我需要结果等于[],第一次使用它时,它是一个矩阵,我想不断地向它添加矩阵 |a,b,c| |j,k,l| |s,t,u| |d,e,f| |m,n,o| |v,w,x| |g,h,i|.|p,q,r|,|y,z,?| /*I want to be able to get back */ |(a+j+s),(b+k+t),(c+l+u)| |(d+m+v),(e+n+w),(f+o+x)| |(g+p+y),(h+q+z)

我想要一个谓词,在第一次迭代中有一个空列表,所以

示例(列表、结果):-

我需要结果等于[],第一次使用它时,它是一个矩阵,我想不断地向它添加矩阵

|a,b,c| |j,k,l| |s,t,u|
|d,e,f| |m,n,o| |v,w,x|
|g,h,i|.|p,q,r|,|y,z,?|

/*I want to be able to get back */
|(a+j+s),(b+k+t),(c+l+u)|
|(d+m+v),(e+n+w),(f+o+x)|
|(g+p+y),(h+q+z),(i+r+?)|
这些通常是浮点值


我需要第一次将result设置为[],谓词才能工作。这可能吗?我知道这是一个令人困惑的问题,如果你能理解的话,这是一个很难回答的问题,但是任何帮助都会很好。

简单真理表。迭代列表时有8种可能的组合,对吗

试着这样做:

foo( []     , []     , []     , []     ) .
foo( []     , []     , [Z|Zs] , [Z|Rs] ) :- R is 0+0+Z , foo( [] ,[] ,Zs , Rs ) .
foo( []     , [Y|Ys] , []     , [Y|Rs] ) :- R is 0+Y+0 , foo( [] ,Ys ,[] , Rs ) .
foo( []     , [Y|Ys] , [Z|Zs] , [R|Rs] ) :- R is 0+Y+Z , foo( [] ,Ys ,Zs , Rs ) .
foo( [X|Xs] , []     , []     , [R|Rs] ) :- R is X+0+0 , foo( Xs ,[] ,[] , Rs ) .
foo( [X|Xs] , []     , [Z|Xs] , [R|Rs] ) :- R is X+0+Z , foo( Xs ,[] ,Zs , Rs ) .
foo( [X|Xs] , [Y|Ys] , []     , [R|Rs] ) :- R is X+Y+0 , foo( Xs ,[] ,Zs , Rs ) .
foo( [X|Xs] , [Y|Ys] , [Z|Zs] , [R|Rs] ) :- R is X+Y+Z , foo( Xs ,Ys ,Zs , Rs ) .

我可能有点傻,但我仍然不太明白你在谓词中要求什么。我理解你展示的代数示例,添加3个矩阵(“Prolog中的列表列表”),它们由浮点值组成。我也理解您希望第一个查询产生
[]
的概念。但是,您希望如何生成后续矩阵呢?您是说希望查询在第二次迭代中回溯并创建另一个矩阵(而不是
[]
)?第二个矩阵由什么组成?一个更具体的例子将有助于表达需求。谢谢,但我已经弄明白了。这是为了一个项目,我从来没有得到第一个数字是[]我只是递归地做。