2014-03-13 27 views
0

我想有對第一次迭代空的列表,以便的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),(i+r+?)| 

這些通常是浮點值。

我需要結果是[]第一次爲我的謂詞工作。這可能嗎?我知道這是一個令人困惑的問題,如果你能理解這個問題,那麼這個問題會很漫長,但任何幫助都會很棒。

+0

我可能是有點愚蠢,但我仍然不是很跟蹤你在一個謂詞要求的。我理解你正在顯示的代數示例,添加3個矩陣(Prolog中的「列表列表」),並且它們由浮點值組成。我也理解你想要第一個查詢產生'[]'的概念。但是,你希望後續的矩陣生成嗎?你是說你想要查詢回溯並在第二次迭代中創建另一個矩陣(不是'[]')?第二個矩陣包含什麼?一個更具體的例子會對錶達這個要求有很大的幫助。 – lurker

+0

謝謝,但我知道了。這是一個項目,我永遠不可能得到的第一個數字是[]我只是遞歸地做了。 – camccar

回答

0

簡單的真值表。在迭代列表的列表時有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) .