Как я могу вставить дополнительный аргумент после последнего аргумента в процедуру пролога?

Я новичок в изучении пролога, и я хочу знать, есть ли у нас такая процедура, как

father("Nic","Adam").  

и я хочу написать функцию, которая добавит новое значение этому

father("Nic","Adam","something"..) 

как я могу это сделать? Используете список? Или что?


person Ercan    schedule 24.03.2010    source источник


Ответы (2)


Быстрый ответ: вы не хотите этого делать.

Более длинный ответ: предикат father/2 имеет определенное значение, а именно, что father(X,Y) X является отцом Y. Предикат father/3 - это совсем другое дело. Чего вы хотите добиться с помощью этого третьего аргумента? Обычно вы используете дополнительные правила, которые выводят вещи из предиката father/2 или даже разрешают его в аргумент father/3.

Остается главный вопрос: какова цель третьего аргумента? Если вы хотите, чтобы ваше разрешение работало для определенных конкретных 3-х аргументов, основанных, например, на существовании соответствующего father/2 предиката, вы можете сделать father(X, Y, 'something') :- father(X,Y), что будет успешным, если у вас есть соответствующий father/2 факт.

PS: Выучите свою терминологию. В Prolog мы не говорим о процедурах и не пишем функции. Вместо этого у нас есть предикаты, факты, правила, ...

PPS: Я не уверен, какую реализацию Prolog вы используете, но вы можете использовать 'something' вместо "something". Последний обычно создает список кодов символов, а не строку:

?- X = 'some'.
X = some.

?- X = "some".
X = [115, 111, 109, 101].
person Frank    schedule 24.03.2010

Просто писать

father(nic, adam). 

Как предикат это уже определяет. Это похоже на констатацию факта: вы объявляете, что father(nic, adam) равно true, затем вы можете выполнить следующее с ожидаемыми результатами:

?- father(nic, adam).
Yes

?- father(nic, X).
X = adam
person Dynami Le Savard    schedule 24.03.2010