logo
TurboProlog / Документация / TOM_1

Один предикат может иметь несколько вариантов использования

Рассматривая append с декларативной точки зрения, вы определили от-

ношение между тремя списками. Это отношение все равно останется, если

List1 и List3 - известны, а List2 - нет. Оно также справедливо, если из-

вестен только List3. Например, чтобы определить, какие из двух списков

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

вить целевое утверждение следующей формы:

append(L1, L2, [1, 2, 4]).

По этому целевому утверждению Турбо Пролог найдет следующие решения:

L1 = [], L2 = [1,2,4]

L1 = [1], L2 = [2,4]

L1 = [1,2], L2 = [4]

L1 = [1,2,4], L2 = []

4 Solutions

Можно также применить append, чтобы определить какой список можно

подсоединить к [3, 4], чтобы получить список [1, 2, 3, 4]. Запустите це-

левое утверждение:

append(L1, [3,4], [1,2,3,4]).

Турбо Пролог найдет решение:

L1 = [1,2].

Предикат append определил отношение между входным набором и выходным

набором таким образом, что отношение применимо в обоих направлениях. За-

давая такое отношение, вы спрашиваете:

Как относится выход с данным входом?

или

Как относится вход с данным выходом?

Состояние аргументов при вызове предиката передается как поток пара-

метров. Аргумент, который присваивается или назначается в момент вызова,

называется входным аргументом и обозначается буквой (i); а свободный ар-

гумент - это выходной аргумент, обозначается буквой (o).

У предиката append есть возможность манипулировать и переставлять

части, как необходимо. Однако, не для всех предикатов имеется возможность

быть вызванными с потоком параметров. Когда в предложении Пролога можно

работать с потоком параметров, оно называется инверсным предложением.

Когда вы записываете собственные предложения в Турбо Прологе, помните,

что инверсное предложение имеет дополнительные преимущества, и создание

инверсных предложений добавляет мощности предикатам, которые вы пишете.