Создание предиката Пролог с помощью макроподобного метапрограммирования - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужен способ, чтобы это работало:

?- create_pred(f, [A, B], (write(That), write(B), write(A), write(This))).
true.
?- f(this, a, b).
_L154bathis
true.

Пока у меня это работает без This:

?- create_pred(f, [A, B], (write(That), write(B), write(A))).
true.
?- f(a, b).
_L154ba
true.

Код для этого следующий:

create_pred(Name, Args, Body) :-
    length(Args, Argc),
    functor(F, Name, Argc),
    term_variables(F, Vars),
    term_variables(Args, Vars),
    assertz((F :- Body)).

Есть идеи, как мне получить первый аргумент, объединенный с переменной This (а не That) из тела?

...