有 - myMultiply/3
myMultiply([],X,[]) :- !.
myMultiply([H|T],X,Result) :-
myMultiply(T,X,NewRest),
Elem is H*X,
Result = [Elem|NewRest].
将左边的每个元素排在第2个arg的nun并返回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
设置在右侧列表的每个元素的左侧列表中,然后重新调整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.
而不是上面的例子。
我在这里做错了什么?
答案 0 :(得分: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]].
你能否发现切割无用的原因?