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

Предположим, у меня много предикатов, используемых для хранения данных. Я вручную ввел все эти данные вручную. Теперь мне нужно убедиться, что все они имеют одинаковое количество аргументов.

Возьмите пример ниже, где я должен убедиться, что data всегда имеет 6 аргументов:

% data(Id, Name, Age, Street, City, Phone).
data(1, 'John', 12, "1 New Street", "Central City", "873289712").
data(2, 'Ali', 11, "122 Sesame Street", "Central City", "823283821").
% ...

Как я могу написать предикат, который проверяет, все ли предикаты data имеют правильное количество аргументов? Если число аргументов неверно для конкретной записи, я хотел бы знать, какая запись неверна.

Например:

CheckArguments(data, 6).

Должен дать false, если существует предикат data(2, 'Farah')., поскольку эта запись имеет только 2 аргумента из требуемых 6. Кроме того, предикат должен каким-то образом сказать мне, что предикат-нарушитель data(2, 'Farah')..

1 Ответ

1 голос
/ 21 февраля 2020

Используйте стандартный предикат ISO Prolog current_predicate/1. Например, после загрузки предложений данных:

| ?- current_predicate(data/Arity).

Возвратитесь во все решения, чтобы получить все арности для пользовательских предикатов с именем data.

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