#dynamic #prolog #predicate
#динамический #prolog #предикат
Вопрос:
Я новичок в языке Prolog, и я нахожусь в ситуации, когда используется динамический /1 . В моем коде есть строка, например, которая выглядит так:
:- dynamic actual_position/1, at/2, holding/1, talked/1, examined/1.
Я хочу понять, почему actual_position имеет значение /1 по сравнению с тем, у которого есть /2.
Спасибо!
Комментарии:
1. Число
/
указывает количество параметров.2. Я вижу, большое вам спасибо!
Ответ №1:
Число после косой черты ( /
) — это арность предиката: это количество параметров, которые он принимает. So member/2
означает member
предикат или функтор с двумя параметрами.
Арность важна, поскольку, как, например, в Java, можно перегружать имена предикатов: можно определить несколько предикатов с тем же именем, но с другой арностью. Например, append/2
[swi-doc] объединяет список списков в один список, тогда как append/3
[swi-doc] добавляет два списка вместе в один список.
Комментарии:
1. И у нас есть правила DCG:
foo//2
получение двух скрытых параметров для списка потоков. Однако нет фиксированного синтаксиса для (арифметических) функций:foo/(2)
было бы неплохо. Ни для предикатов, связанных с SWI-Prolog dict (которые мне нравится называть точечными вызовами..foo/2
было бы неплохо.2. @DavidTonhofer: Мы не можем определять арифметические функции в ISO-Prolog, и поэтому перегрузка арности невозможна. арифметические функции в основном являются унарными или двоичными. Если мы используем один, мы знаем, что есть что.