Prolog dodawanie list-podlist

0

Mam za zadane dodać dwie macierze zapisane jako listy [[1,1,1],[1,1,1],[1,1,1]] oraz [[3,4,5][5,6,7][7,8,9]] po wpisaniu

sum([[1,1,1], [1,1,1], [1,1,1]], [[2,3,4], [4,5,6], [6,7,8]], R).

ma się pojawić

R = [[3,4,5],[5,6,7],[7,8,9]].

Próbowałem ale nic nie wychodzi szukać szukałem to znalazłem tylko sumowanie 2 list :/ czy mogę prosić o pomoc i o wyjaśnienie??

0

Dokładnie tak samo, tylko zamiast sumowania dajesz funkcję, którą znalazłeś.

Moje rozwiązanie (trochę funkcyjne):

zip_with(_, [], [], []).
zip_with(Pred, [X|XS], [Y|YS], [Z|ZS]) :-
  call(Pred, X, Y, Z),
  zip_with(Pred, XS, YS, ZS).

sum_lists(XS, YS, Sum) :- zip_with(plus, XS, YS, Sum).
sum(XS, YS, Sum) :- zip_with(sum_lists, XS, YS, Sum).
0
! Error 20 : Predicate Not Defined
! Goal     : call(sum_lists,[1,1,1],[2,3,4],_19900)

Nie wiem dlaczego :/ w twoim kodzie cos muszę zmieniać?
Miałem dopiero 5 zajęć z Prologa i nawet nie wiem co to call i append :/ nie rozumiem tego i to nie działa to tylko znalazłem do sumowania dwóch list w trzecia.

sum2([],[],[]).
sum2([H|T],[H1|T1],[H2|T2]):- 
			     H2 is H+H1,
			     sum2(T,T1,T2).
1

Jakiego Prologa używasz? Mój przykład działa z SWI Prologiem - https://asciinema.org/a/7kw15drgymlfxetwwnl0ur76u.

0

Uzywam Wprolog a raczej WIN PROLOG
Tutaj daje szczegoly na temat programu
user image

0

Gdyby ktoś musiał taki program napisać to daje rozwiązanie

?-sum([[1,1,1],[1,1,1],[1,1,1]],[[2,3,4],[4,5,6],[6,7,8]],R).
R = [[3,4,5],[5,6,7],[7,8,9]]

sum(A,B,C):-sum-matrices(A,B,C), printm(A),nl, printm(B),nl, printm(C),nl.

sum-matrices([],[],[]).
sum-matrices([H1|T1],[H2|T2],[H3|T3]):-sum-line(H1,H2,H3),sum-matrices(T1,T2,T3).

sum-line([],[],[]).
sum-line([A1|B1],[A2|B2],[A3|B3]):-A3 is A1 + A2,sum-line(B1,B2,B3).

printm([]).
printm([H|T]):-write(H),nl,printm(T).

1 użytkowników online, w tym zalogowanych: 0, gości: 1