2015-03-19 2 views
1

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

  • ,
  • ;
  • |
  • is
  • +

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

+1

Только это/2. Но попросите вашего профессора подтвердить, что вы не можете использовать * numbers * – CapelliC

+3

Это смешное требование. Вы не можете делать _anything_ без встроенных предикатов. Вы уверены, что ваш инструктор не имел в виду нечто вроде «не использовать предикаты из« библиотеки (списков) »или так? –

+2

Я считаю, что это« использование ТОЛЬКО встроенных предикатов ».. –

ответ

-1

Ulrich Neumerkel поддерживает список с предикатами ISO и оцениваемых функций здесь: http://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue#status_quo

Но обычно управляющие конструкции 7,8 действительно не считаются БИП:

1 true/0. 2 fail/0. 3 call/1. 4 !/0. 5 (',')/2. 6 (;)/2 – disjunction. 
7 (->)/2. 8 (;)/2 – if-then-else. 9 catch/3. 10 throw/1. 

То есть из-за их они обычно не могут быть реализованы в ISO Prolog. Например, пункт Prolog, такие как:

and(A,B) :- A, B. 

только приблизительно, что делает соединение, так как он не сможет правильно обработать разрез. Таким образом, эти (мета) предикаты составляют ядро.

Таким образом, вы можете считать себя работающим без бипов, если используете только набор 7.8. Если вы воздерживаетесь от использования call/1,!/0, (->)/2, catch/3 и throw/1, вы даже используете только Horn Clauses.

Это не не то, что ничто не может быть сделано в Хорна, много загадок и приложений NoSQL aleady работы, и вы можете, например, определить Пеано дополнение:

add(n, X, X). 
add(s(X), Y, s(Z)) :- add(X, Y, Z). 

Ниже приведен пример запуска 2 + 2 = 4:

?- add(s(s(n)), s(s(n)), X). 
X = s(s(s(s(n)))). 
Смежные вопросы