Как получить предикаты, указав количество аргументов, которые должны иметь? - PullRequest
0 голосов
/ 16 февраля 2020

Предположим, у меня есть следующие отношения:

d(m, n).
d(x, y).
d(a, b, c).
d(i, j, k).
d(1, 2, 3, 4).

Как мне написать предикат mypred(Pred, NumArgs, Rel)?

Примеры:

  1. mypred(d, 2, Rel): Rel будет d(m, n), d(x, y), false.
  2. mypred(d, 3, Rel): Rel будет d(a, b, c), d(i, j, k), false.
  3. mypred(d, 4, Rel): Rel будет d(1, 2, 3, 4), false.

1 Ответ

0 голосов
/ 16 февраля 2020
mypred(F, A, Rel_0) :-
   functor(Rel_0, F, A),
   call(Rel_0).

Однако, скорее не используйте такое определение. Вместо этого попробуйте использовать call/N с N > 1.

Определения как mypred / 3 очень трудно анализировать. Перекрестные ссылки практически невозможны. С другой стороны, с call/N, N > 1 возможна довольно похожая функциональность, перекрестные ссылки остаются неизменными. См. для многих применений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...