2013-01-20 25 views
0

具有列表 - myMultiply/3序言 - 列出

myMultiply([],X,[]) :- !. 
myMultiply([H|T],X,Result) :- 
    myMultiply(T,X,NewRest), 
    Elem is H*X, 
    Result = [Elem|NewRest]. 

哪家mulply每個元素在左邊的列表在第二ARG尼姑並返回Result

例如 -

myMultiply([1,4,5],4,R). 
R = [4,16,20]. 

而且tlm/3

tlm(List1,[],_) :- !. 
tlm(List1,[H2,Rest2],Result):- 
    myMultiply(List1,H2, Elem), 
    tlm(List1,Rest2,NewResult), 
    Result = [Elem|NewResult]. 

其中還有我試圖讓myMultiply/3到左側列表右側列表中的每個元素和retun Result

例如 -

?- tlm([3,4,2],[4,7,8],R). 
R = [[12,16,8],[21,28,14],[24,32,16]]. 

一般的想法是得到了Elem列表和Concat的他NewResult

我的問題是tlm/3回報false -

?- tlm([3,4,2],[4,7,8],R). 
false. 

代替上述的例子。

我在這裏做錯了什麼?

回答

1

你的代碼有兩個問題。

這裏我已經做了一個基本的更正,並評論了無用的切割。

myMultiply([],X,[]) :- !. % the cut is useless here 
myMultiply([H|T],X,Result) :- 
    myMultiply(T,X,NewRest), 
    Elem is H*X, 
    Result = [Elem|NewRest]. 

tlm(List1,[],[]) :- !. % the cut is useless here 
tlm(List1,[H2|Rest2],Result):- 
    myMultiply(List1,H2, Elem), 
    tlm(List1,Rest2,NewResult), 
    Result = [Elem|NewResult]. 

,結果是...

?- tlm([3,4,2],[4,7,8],R). 
R = [[12, 16, 8], [21, 28, 14], [24, 32, 16]]. 

你能找出爲什麼裁員是沒有用的?

+0

你能指出你的修正是什麼?我看不到任何更改.. – URL87

+1

確定:'tlm(List1,[],[])'而不是'tlm(List1,[],_)'和'tlm(List1,[H2 | Rest2],結果)而不是'tlm(List1,[H2,Rest2],Result)'。三個人物......其次,特別是「虛假」答案的原因。 – CapelliC