ВУЗ:
Составители:
Рубрика:
count(“США”,302).
count(“Россия”,142).
plosh(“США”,9).
plosh(“Россия”,17).
density(X,A) :-count(X,Y), plosh(X,W), A = Y/W, write(“\n “, X, “=”, A).
goal
X = ”США“, density(X, K), density(“Россия“, R).
6.6. СПИСКИ В ЯЗЫКЕ ПРОЛОГ
Список – это упорядоченная последовательность элементов, которая может иметь произвольную длину. Элементами
списка могут быть любые термы: константы, переменные, структуры, а также другие списки.
В Прологе список – это просто один из частных видов структуры. Список – это любой пустой список, не содержащий
ни одного элемента, или структура, имеющая две компоненты: голову и хвост. Пустой список записывают как []. Голова и
хвост списка являются компонентами функтора, обозначаемого точкой. Например, список, состоящий из одного элемента
“а”, можно записать как:
.(а, [])
Аналогично, список, состоящий из трёх элементов: a, b, c, может быть записан как:
.(a, .(b, .(c, [])))
Списки являются упорядоченными последовательностями элементов, так что списки .(a, .(b, [])) и .(b, .(a, [])) являются
разными.
Так как запись сложных списков с помощью функтора “.” часто оказывается неудобной, то в Прологе предусмотрена
другая синтаксическая форма, которая может быть использована для записи списков в программе. Это так называемая
скобочная форма записи списка. Она представляет собой заключённую в квадратные скобки последовательность, например:
[a], [a, b, c].
Списки могут содержать другие списки или переменные, например: [a, V1, b, [X,Y]]. Переменные, входящие в списки,
ничем не отличаются от переменных в любой другой структуре. Они в любой момент могут быть конкретизированы.
Работа со списками основана на расщеплении их на голову и хвост. Голова списка – это его первый элемент; хвост
списка – это список, состоящий из всех элементов исходного списка, за исключением первого. Например:
Список Голова Хвост
[a, b, c] A [b, c]
[a] A [ ]
[a, V1, b, [X,Y]] A [V1, b, [X,Y]]
Так как операция расщепления списка на голову и хвост очень широко используется в Прологе, то введена специальная
форма для представления списка с головой X и хвостом Y. Эта форма записывается как [X|Y], где для разделения X и Y
используется вертикальная черта. При конкретизации структуры подобного вида X сопоставляется с головой списка, а Y – с
хвостом, например:
Список 1 Список 2 Конкретизация
[1, 2, 3] [X|Y] X = 1
Y = [2,3]
[a, b, c, d] [X, Y|Z] X = a
Y = b
Z = [c, d]
[A, b, c] [a|B] A = a
B = [b, c]
[abc|T] [abc|def] T = [def]
Синтаксически некорректной является запись: [X, Y|Z, W].
Возможны ситуации, когда, используя скобочную форму записи списков, создаётся структура, похожая на списки, но не
заканчивающаяся пустым списком, например:
Список 1 Список 2 Конкретизация
[a|B] [P|c] P = a
B = c
Константа “с” не является ни списком, ни пустым списком. Обработка таких структур требует большой осторожности,
когда они используются в качестве хвоста списка.
Одна из областей применения списков – это представление строк литер. Иногда возникает необходимость в
использовании строк литер для ввода или вывода текста.
Пример.
В базе знаний содержатся два факта и четыре правила.
Факты:
1) сернистая кислота – кислота;
2) азотная кислота – кислота.
Правила:
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »