Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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, "понедельник"]

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

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





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 364 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2464 - | 2390 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.