Учебное пособие: Язык логического программирования Visual Prolog

person(X, Sex, _),

person(Sex, Y, _).

Несмотря на то, что и name и sex описываются как symbol, они не эквивалентны друг другу. Это и позволяет VisualProlog определить ошибку, если вы перепутаете их. Это полезно в тех случаях, когда ваши программы очень велики и сложны.

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

Следующий пример программы при его загрузке приведет к ошибке типа.

Domainsproduct, sum = integer

predicates

add_em_up(sum,sum,sum)

multiply_em(product,product,product)

clauses

add_em_up(X, Y, Sum):-Sum=X+Y.

multiply_em(X,Y,Product):-Product=X*Y.

Эта программа выполняет две операции: складывает и умножает. Зададим ей следующую цель:

add_em_up(32, 54, Sum) .

Visual Prolog (Test Goal) ответит:

Sum=86

1 Solution

что является суммой двух целых чисел, которые вы передали в программу.

С другой стороны, эта же программа с помощью предиката multiply_em умножает два аргумента. Допустим, мы хотим удвоить произведение 31 на 17. Задаем следующую цель:

multiply_em(31, 17, Sum), add_em_up(Sum, Sum, Answer).

иждем, чтоVisual Prolog (Test Goal) ответит:

Sum=527, Answer=1054

1 Solution

Однако вместо этого вы получите ошибку типа. Это случилось из-за того, что имела место попытка передать результирующее значение предиката multiply_em, которое относится к домену product, в качестве первого и второго аргументов (которые должны относится к домену sum) в предикат add_em_up. И хотя оба эти домена соответствуют типу integer — это различные домены.

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

13. Раздел цели

По существу, раздел goal (цели) аналогичен телу правила: это просто список подцелей. Цель отличается от правила лишь следующим:

· за ключевым словом goal не следует :-;

· при запуске программы VisualProlog автоматически выполняет цель.

Если все подцели в разделе goal истинны, — программа завершается успешно. Если же какая-то подцель из раздела goal ложна, то считается, что программа завершается неуспешно (хотя чисто внешне никакой разницы в этих случаях нет, — программа просто завершит свою работу).

14. Декларации и правила

К-во Просмотров: 385
Бесплатно скачать Учебное пособие: Язык логического программирования Visual Prolog