dot/3 — produs scalar
Scrieți un predicat dot/3 al cărui prim argument este o listă de întregi, al doilea argument este tot o listă de întregi, de lungimea primeia, iar al treilea argument este produsul scalar dintre primele două argumente.
Reamintim că:
$$ \mathrm{dot}(v, w) = \sum_{i=1}^{n} v_i \cdot w_i $$
?- dot([2, 5, 6], [3, 4, 1], Result).
Result = 32
Hint: recursie în paralel pe cele două liste (pattern-ul „zip"); cazul de bază
dot([], [], 0).
Te-ai blocat?
editor
soluție
dot([], [], 0) :- !.
dot([H1 | T1], [H2 | T2], Result) :-
dot(T1, T2, ResultTail),
Result is ResultTail + H1 * H2.
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
dot([2, 5, 6], [3, 4, 1], Result).
așteptat: Result = 32
?
dot([], [], Result).
așteptat: Result = 0
?
dot([1, 2], [3, 4], Result).
așteptat: Result = 11