Просто делайте это шаг за шагом, передавая изменяющееся состояние.
step(S,A,X, S2,A2) :-
( S = [+ | S2], A2 is A + X
; S = [- | S2], A2 is A - X
; S = [* | S2], A2 is A * X
; S = [/ | S2], A2 is A div X
).
puzzle(S) :-
step(S, 7, 10, S2, A2),
step(S2, A2, 3, S3, A3),
step(S3, A3, 2, [], 28).
Пытаясь:
?- puzzle(X).
X = [+,-,*] ;
false.