Predykat append(L1,L2,L3)

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.

append2([], L, L).
append2([X|L1], L2, [X|L3]) :- append2(L1, L2, L3).
0

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

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
0

Dzięki!

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