Пример:Prolog: что такое префикс в предикатах/переменных?
conditions([-on(a, b)]).
Я искал неутомимо, но бесплодно смысл этого и префикса +. Ты моя последняя надежда.
Пример:Prolog: что такое префикс в предикатах/переменных?
conditions([-on(a, b)]).
Я искал неутомимо, но бесплодно смысл этого и префикса +. Ты моя последняя надежда.
Контекст не предусмотрен, поэтому я предполагаю, что это может произойти из-за чего-то в документации.
Если вы прочитали вводный материал в руководстве 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)
).
Я прочитал этот бит о режиме spec, но это только смутило меня дальше. Однако ваше объяснение моего примера было ответом, который я искал. Большое вам спасибо за этот mbratch! – ajc
@ajc да, извините, если я отвлекся на документацию. Сначала я думал, что это была одна из тех путаниц, но потом поняла, что, основываясь на вашем примере, это, вероятно, не было. Но я оставил все, что там для полноты. Я рад, что ответ наконец помог. :) – lurker
@lurker Привет. Часть документации меня интересует. Я хотел бы знать, если +, -,? и т. д. - это всего лишь некоторые обозначения, и они фактически не ограничивают вас запросом на что-то вроде p (X, Y), где p - предикат со следующим заголовком: p (+ X, -Y), и запрос может даже работать. В этом случае предикат должен быть лучше «определен» как p (? X, -Y) или мне что-то не хватает? Спасибо. –