=../2
(также называемый univ / 2) способен создавать термин из списка, где первый элемент списка будет функтором вновь созданного термина, а другие элементы списка будут его аргументы. Он не может создавать несколько терминов одновременно. Для этого его нужно использовать столько раз, сколько вы хотите создать терминов.
В вашем случае кажется, что вы хотите три термина: f(x)
, g(x)
и соединение между ними. Следующая цель, выданная по запросу любой реализации верхнего уровня Prolog, должна работать нормально (здесь я использую GNU Prolog, потому что результаты отображаются более четко, чем, например, SWI):
| ?- Fx =.. [f, x], Gx =.. [g, x], H =.. [',', Fx, Gx].
Fx = f(x)
Gx = g(x)
H = f(x),g(x)
Конечно, вы можете определить свой собственный предикат для инкапсуляции этой функциональности, если вам нужно повторно использовать его в нескольких местах.
Что касается объяснений =../2
, я изучал Пролог в классе и в книгах, поэтому я не настолько осведомлен, когда дело доходит до онлайн-ресурсов. Тем не менее, есть другой вопрос StackOverflow , который может быть вам полезен.