Predykat append(L1,L2,L3)

  • Rejestracja: dni
  • Ostatnio: dni
0

Hej!
Z ciekawości chciałem samemu zdefiniować predykat dla append w prologu, tą definicję znalazłem gdzieś w necie. Problem w tym, że to działa ale nie mam pojęcia dlaczego. Dlaczego ogonem listy wynikowej jest ogon listy pierwszej złączony z listą drugą? Nigdzie nie widzę tu modyfikacji na L2 czy łączenia L3.

Kopiuj
append2([], L, L).
append2([X|L1], L2, [X|L3]) :- append2(L1, L2, L3).
  • Rejestracja: dni
  • Ostatnio: dni
0

Poprawka. Łączenie list L1 i L3 rozumiem, nie wiem dlaczego L2 jest połączone z L3.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzieje się to w pierwszym dopasowaniu.

Prolog działa tak, że próbuje dopasować warunki tak by wszystkie predykaty były spełnione. Więc w tym przypadku masz:

Przyjmijmy, że łączymy listy L1 = [1, 2, 3] oraz L2 = [4, 5]:

  • początek X listy L1 musi być identyczny z początkiem listy L3, w rezultacie uzyskujemy ogon L1' oraz L3'
  • początek X' listy L1' musi być identyczny z początkiem listy L3', w rezultacie uzyskujemy ogon L1" oraz L3"
  • początek X" listy L1" musi być identyczny z początkiem listy L3', w rezultacie uzyskujemy pusty ogon oraz L3'''
  • z racji, że pusta lista pasuje do pierwszego przypadku, to znaczy, że L3''' musi być identyczne jak cała L2
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki!

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.