2013-12-11 2 views

ответ

2

Контекст не предусмотрен, поэтому я предполагаю, что это может произойти из-за чего-то в документации.

Если вы прочитали вводный материал в руководстве Prolog (SWI, Gnu или в зависимости от того, что начерчено), они описывают соглашения. +, - и ? используются в качестве условного обозначения в документации, чтобы указать, является ли переменная входной или выходной или переменная (либо). Например, из руководства Gnu Prolog:

+: аргумент должен быть создан.

-: аргумент должен быть переменной (будет создан, если встроенный предикат успешно завершен).

?: аргумент может быть инстанцирован или переменным.

Так, например, atom_length/2 описывается как;

atom_length(+atom, ?integer) 

Что означает, что вы должны предоставить atom (он не может быть переменной) и integer может быть либо переменной (в этом случае atom_length обеспечит значение), или он может быть реализован (в этом случае будет atom_length укажите, является ли ваш запрос истинным или ложным) `.

Обычно вы не используете - или + в своем коде в этом смысле, если вы действительно не намерены иметь его там как часть вашего термина. Учитывая данный пример, похоже, это, возможно, была намеренная часть термина:

conditions([-on(a, b)]). 

Параметр списка состоит из термина, когда прописано полностью, это -(on(a,b)) (-/1 с параметром, что это on/2). - здесь не предоставляет никакой функции, он просто добавляет структуру (структура - это термин с именем - и параметр on(a,b)).

+0

Я прочитал этот бит о режиме spec, но это только смутило меня дальше. Однако ваше объяснение моего примера было ответом, который я искал. Большое вам спасибо за этот mbratch! – ajc

+1

@ajc да, извините, если я отвлекся на документацию. Сначала я думал, что это была одна из тех путаниц, но потом поняла, что, основываясь на вашем примере, это, вероятно, не было. Но я оставил все, что там для полноты. Я рад, что ответ наконец помог. :) – lurker

+0

@lurker Привет. Часть документации меня интересует. Я хотел бы знать, если +, -,? и т. д. - это всего лишь некоторые обозначения, и они фактически не ограничивают вас запросом на что-то вроде p (X, Y), где p - предикат со следующим заголовком: p (+ X, -Y), и запрос может даже работать. В этом случае предикат должен быть лучше «определен» как p (? X, -Y) или мне что-то не хватает? Спасибо. –

Смежные вопросы