Вычислить точечное произведение двух векторов - PullRequest
2 голосов
/ 05 февраля 2011

Я должен создать предикат в прологе так, чтобы 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 ]

2 голосов
/ 05 февраля 2011

Использование SWI-Prolog:

?- use_module(<a href="http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl" rel="nofollow">library(lambda)</a>).
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].
2 голосов
/ 05 февраля 2011

В визуальном прологе:

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. Извините, никакая другая реализация Пролога не доступна под рукой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...