Итак, оператор univ. Я не совсем понимаю его.
Например, это:
foo(PredList,[H|_]) :- bar(PredList,H).
foo(PredList,[_|T]) :- foo(PredList,T),!.
bar([H|_],Item) :- G =.. [H,Item],G.
bar([_|T],Item) :- bar(T,Item).
Что это делает? Это проверяет, верен ли другой предикат. I не понимаю, что делает "..".
Как бы вы переписали это без оператора univ?