Это правильная догадка: member/2
можно использовать для этого.
Возможно, вы думали написать что-то вроде этого:
before(A,Z,[A|Xs]) :- member(Z,Xs).
before(A,Z,[_|Xs]) :- before(A,Z,Xs).
Пример запроса с использованием SICStus Prolog 4.5.1:
| ?- before(2,X,[1,2,3]).
X = 3 ? ;
no
А вот еще один запрос, этот даже немного более общий:
| ?- before(A,Z,[1,2,3,4]).
A = 1, Z = 2 ? ;
A = 1, Z = 3 ? ;
A = 1, Z = 4 ? ;
A = 2, Z = 3 ? ;
A = 2, Z = 4 ? ;
A = 3, Z = 4 ? ;
no