0

有——myMultiply/3

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

哪个将左侧列表中的每个元素叠加到第二个 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列表并将他连接到NewResult.

我的问题是tlm/3返回false-

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

而不是上面的例子。

我在这里做错了什么?

4

1 回答 1

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]].

你能看出为什么削减是无用的吗?

于 2013-01-20T13:09:52.113 回答