Если вы посмотрите на это как на простое syntacti c объединение ( = / 2 ), на котором основан HM, то используйте пролог .
?- a(A,b(c)) = a(B,A).
A = B, B = b(c).
поэтому A
объединяется с B
и B
объединяется с b(c)
=/2
означает, что = является оператором, который принимает два аргумента и вернет результат объединения двух терминов или ложного.
Некоторые другие примеры
?- a(A,b(c)) = a(A,A).
A = b(c).
?- a(b(d),b(c)) = a(A,A).
false.
Если вы хотите попробовать их онлайн с помощью Пролога, используйте SWI SH.