динамические предикаты prolog разница между /1 и /2

#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, и поэтому перегрузка арности невозможна. арифметические функции в основном являются унарными или двоичными. Если мы используем один, мы знаем, что есть что.