Вам нужно будет использовать какой-то предопределенный предикат Prolog, если вы не собираетесь использовать рекурсию.Простое решение может использовать reverse/2
.
firstlast([H|T]) :- reverse([H|T], [H|_]).
Это создает хорошее общее решение:
| ?- first_last(L).
L = [_] ? ;
L = [A,A] ? ;
L = [A,_,A] ? ;
L = [A,_,_,A] ? ;
L = [A,_,_,_,A] ?
...
Если вы хотите убедиться, что в списке есть хотя бы два элемента, тоиспользуйте дополнительный элемент:
firstlast([X,Y|T]) :- reverse([X,Y|T], [X|_]).
Выход:
| ?- firstlast(L).
L = [A,A] ? ;
L = [A,_,A] ? ;
L = [A,_,_,A] ? ;
L = [A,_,_,_,A] ?
...