计算两个向量的点积

时间:2011-02-05 17:05:09

标签: lambda prolog

我应该在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).

2 个答案:

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