我想将两个列表相乘,然后取左列表并乘以每个元素
正确的清单。
例如:
?- multLists([3,4,2], [4,7,8], R).
R = [[12,16,8],[21,28,14],[24,32,16]].
为此,我编写了一个辅助谓词,该谓词需要一个列表并将其相乘
按一个标量:
multListElem([], _, _).
multListElem([H|T], Result, Elem) :-
multListElem(T, W, Elem),
Z is H*Elem,
Result = [Z|W].
但是现在,当我运行
?- multListElem([1,2,3], X, 3).
时我得到:
1 ?- multListElem([1,2,3], X, 3).
X = [3, 6, 9|_G1840].
那奇怪的尾巴
_G1840
是什么? 最佳答案
该错误在这里:multListElem([],_,_)
。当第一个列表为空时,结果为空,因此必须编写multListElem([],[],_).
使用列表时,可以使用功能性习语,例如
maplist:
multLists(L1, L2, R) :-
maplist(mult_one_list(L1), L2, R).
mult_one_list(L1, Elem, R) :-
maplist(mult_2_numbers(Elem), L1, R).
mult_2_numbers(V1, V2, R) :-
R is V1 * V2.
maplist
将第一个参数应用于每个列表的每个元素(作为参数传递给它)。