Я прочитал руководство:
Вот несколько примеров того, как они появляются в файле:
:- mode(1,mem(+number,+list)).
:- mode(1,dec(+integer,-integer)).
:- mode(1,mult(+integer,+integer,-integer)).
:- mode(1,plus(+integer,+integer,-integer)).
:- mode(1,(+integer)=(#integer)).
:- mode(*,has_car(+train,-car)).
Каждый ModeType либо (а) простой; или (б) структурированный. Простой ModeType - это один из: (a) + T, указывающий, что, когда литерал с символом предиката p появляется в гипотетическом предложении, соответствующий аргумент должен быть «входной» переменной типа T; (b) -T, указывающий, что аргумент является «выходной» переменной типа T; или (c) #T, указав, что это должна быть константа типа T. Все приведенные выше примеры имеют простые типы мод. Структурированный ModeType имеет форму f (..), где f - символ функции, каждый аргумент которого является простым или структурированным ModeType. Вот пример, содержащий структурированный ModeType:
:- mode(1,mem(+number,[+number|+list])).
С помощью этих директив Aleph гарантирует, что для любого гипотетического предложения формы H: - B1, B2, ..., B c:
Входные переменные. Любая входная переменная типа T в литерале тела Bi появляется как выходная переменная типа T в литерале тела, который появляется перед Bi, или появляется как входная переменная типа T в H. Выходные переменные. Любая выходная переменная типа T в H отображается как выходная переменная типа T в Bi. Константы. Любые аргументы, обозначенные #T в режимах, имеют только основные термины типа T.
Но я все еще не могу понять, когда мне следует использовать «+» и «-»? Не могли бы вы привести мне пример?