Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Fact(0,1).






fact(K, F): -K1=K-1, fact(K1, F1), F=F1*K.

Введем запрос:

Goal: fact(0, X), write(”X= ”, X), nl, fail.

Получим Х=1, и процесс зациклится, так как Пролог пытается сделать попытку сопоставить fact(0, X) со вторым утверждением:

fact(K, F): -…

Сопоставление будет успешным, и теперь он попытается доказать цель fact(0, F1), что в свою очередь приводит к цели fact(-1, F1) и т.д.

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

fact(0, 1): -!.

fact(K, F): -K1=K-1, fact(K1, F1), F=F1*K.

Введем запрос:

Goal: fact(0, X), write(”X= ”, X), nl, fail.

Получим единственное решение.

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

 

Списки

Список – упорядоченная последовательность элементов произвольной длины.

Список задается перечислением элементов списка через запятую в квадратных скобках.

 

Пример. Варианты списков

[monday, tuesday, wednesday, thursday, friday, saturday, sunday] — список, элементами которого являются английские названия дней недели;

[1, 2, 3, 4, 5, 6, 7] — список, элементами которого являются номера дней недели;

['п', 'в', 'с', 'ч', 'п', 'с', 'в'] — список, элементами которого являются первые символы русских названий дней недели;

[ ] — пустой список, т.е. список, не содержащий элементов.

 

Элементы списка могут быть любыми, в том числе и составными объектами. В частности, элементы списка сами могут быть списками.

В разделе описания областей определения списки описываются следующим образом:

Domains

< имя спискового домена> =< имя домена элементов списка> *

Звездочка после имени домена указывает на то, что задается список, состоящий из объектов соответствующего типа.

Пример.

listI = integer* /* список, элементы которого —

целые числа */

listR = real* /* список, состоящий из вещественных

чисел */

listC = char* /* список символов */

lists = string* /* список, состоящий из строк */

listL = listI* /* список, элементами которого являются

списки целых чисел */

Последнему примеру будет соответствовать список вида:

[ [1, 3, 7], [], [5, 2, 94], [–5, 13] ]

В классическом Прологе элементы списка могут принадлежать разным доменам, например: [monday, 1, " понедельник" ]

В Турбо Прологе, в связи со строгой типизацией, все элементы списка должны принадлежать одному домену. Однако можно разместить в одном списке объекты разной природы, используя домен с соответствующими альтернативами.

Пример. Создать список объектов разного типа






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.