Насколько я понимаю, в Prolog вы захватываете функции во время синтаксического анализа следующим образом:
foo(feature(X)) --> [X], bar.
Это распространено при разработке DCG?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.