[a,b,c]
- это просто синтаксический сахар для '.'(a,'.'(b,'.'(c))))
. Таким образом, вы можете точно так же определить свой оператор и написать предикат преобразования:
:- op(500,xfy,'++>').
convert('++>'(A,B),[A|R]) :-
convert(B,R).
convert(Any,[Any]).
Пример:
| ?- X = 1++>2++>3, convert(X,Y).
X = 1++>2++>3
Y = [1,2,3] ?
yes