我应该在prolog中创建一个谓词,以便iprod(List1, List2, Result)
获取两个长度相等的列表,每个列表包含整数。结果是两个向量的点积。
例如,List1 = [1,2,3]
,List2 = [4,5,6]
,结果将是1*4 + 2*5 + 3*6
。另外我不应该使用内置的dotproduct函数。
到目前为止我的代码:
iprod([],[], 0).
iprod([H1|List1], [H2|List2], Result is H1 * H2) :- iprod(List1, List2, Result).
答案 0 :(得分:2)
在Visual Prolog中:
domains
ilist=integer*
predicates
iprod(ilist, ilist, integer, integer)
clauses
iprod([], _, R, R).
iprod([X|Xs], [Y|Ys], A, R):-
M = X * Y,
Rnew = A + M,
iprod(XS, Ys, Rnew, R).
goal
iprod([1,2,3],[4,5,6], 0, R).
32
中的结果。对不起,手头没有其他Prolog实现。
答案 1 :(得分:2)
使用SWI-Prolog:
?- use_module(library(lambda)).
true.
?- maplist(\X^Y^Z^(Z=X*Y),[1,2,3],[4,5,6],Dots).
Dots = [1*4, 2*5, 3*6].
?- maplist(\X^Y^Z^(Z is X*Y),[1,2,3],[4,5,6],Dots).
Dots = [4, 10, 18].