Я изучаю Пролог и вижу этот код
foo([],[]).
foo([[A,_ ]|L], [A|P]) :-foo(L ,P).
В результате говорят, что этот код занимает N элемент списка списка, Пример объявления, если мы даем этот запрос:
?foo([[car],[house],[man]],X)
X= [c,h,m]
При первом прочтении я вижу, что что-то не так. Для меня этот код берет хвост списка списка и остальную часть первого элемента списка, поэтому для меня первое расширение будет (трассировка)
foo([[house],[man]], ar)
foo([[man]], ouse)
foo([], an)
false.
Я пытаюсь скомпилировать с swi-прологом и дать этот след:
[trace] ?- trace,foo([[car],[house],[man]],X).
Call: (9) foo([[car], [house], [man]], _1016) ? creep
Fail: (9) foo([[car], [house], [man]], _1016) ? creep
false.
Что я не прав?