Prolog dodawanie list-podlist

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
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

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

ma się pojawić

Kopiuj
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??

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Moje rozwiązanie (trochę funkcyjne):

Kopiuj
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).
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0
Kopiuj
! 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.

Kopiuj
sum2([],[],[]).
sum2([H|T],[H1|T1],[H2|T2]):- 
			     H2 is H+H1,
			     sum2(T,T1,T2).
hauleth
  • Rejestracja: dni
  • Ostatnio: dni
1

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

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

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

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

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

Kopiuj
?-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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.