Я пытаюсь определить предикат adjacent(X, Y, Zs)
, который является истинным, если X и Y смежны в списке. Мой код в настоящее время:
adjacent(_, _, []).
adjacent(X, Y, [X, Y|Tail]) :-
adjacent(X,Y, Tail).
Он работает для основного случая adjacent(c, d, [a, b, c, d, e])
, но из-за базового случая каждый другой случай также возвращает true, и я застрял на этом.
Другая проблема заключается в том, что если X не равно первой части списка, то она пропускает мимо X и Y и переходит к следующему "X"; например, если c не равно a, то он пропускает как a, так и b и проверяет, c равно c. Это проблематично, если, например, список
[a, c, d, e]
потому что он никогда не проверяет c (я считаю).
Я довольно потерял, как примирить эти два вопроса и повернуть свое логическое понимание того, что должно произойти в коде.
РЕДАКТИРОВАТЬ: Благодаря ответу Христиана Худжера моя ошибка базового случая была исправлена, так что теперь я просто застрял во второй проблеме.