Процедура, которая строит рекурсивную структуру

Рекурсивные структуры могут использоваться для описания различных видов сложных взаимосвязей между термами. Примером этого может служить рекурсивная процедура "можно_путешествовать5", во многом похожая на процедуру "можно_путешествовать4". В процедуре "можно_путешествовать5" строится рекурсивная структура "путь/3", описывающая все промежуточные пункты, посещаемые по пути из исходного города в пункт назначения.

% компания отправление прибытие вид транспорта

путешествие (амтрак, нью_йорк, бостон, поезд).

путешествие (ндж_транзит, нью_йорк, принстон, поезд).

путешествие (амтрак, бостон, портленд, поезд).

путешествие (грейхаунд, бостон, портленд, автобус).

путешествие (амтрак, нью_йорк, Вашингтон, поезд).

путешествие (пиплз, нью_йорк, Вашингтон, самолет).

путешествие (пиплз, бирлингтон, нью_йорк, самолет).

можно_путешествовать5 (А, Б, путь (А, Видтранс, Б)): -

путешествие (-, А, Б, Видтранс).

можно_путешествовать5 (А, Б, путь (А, Видтранс, Рпуть)): —

путешествие (_, А, В, Видтранс),

можно_путешествовать5 (В, Б, Рпуть).

Запросы к процедуре "можно_путешествовать5"

На примере следующих запросов можно проиллюстрировать пользование процедурой "можно_пушествовать5".

|? - можно_путешествовать5 (нью_йорк, бостон, П).

П = путь (нью_йорк, поезд, бостон)

Ответ на этот запрос показывает, что существует прямой маршрут ("путь") поездом из Нью-Йорка в Бостон.

|? — можно_путешествовав (нью_йорк, портленд, П).

П = путь (нью_йорк, поезд,

путь (бостон, поезд, портленд));

П = путь (нью_йорк. поезд,

путь (бостон, автобус, портленд))

|? — можно_путешествовать5 (бирлингтон, портленд, П).

П = путь (бирлингтон, самолет,

путь (нью_йорк. поезд,

путь (бостон, поезд, портленд)))

Ответ на последний запрос показывает, что существует маршрут из Бирлингтона в Портленд через Нью-Йорк и Бостон.

2. 3. Списки Представление списков при помощи структуры "./2"

"./2" - это специальная рекурсивная структура, используемая для представления списков произвольной длины. У этой структуры имеется два аргумента. Первым аргументом является терм любого вида, а вторым — либо другая структура "./2", либо сочетание символов [], которое обозначает конец списка.

Нижеследующая структура представляет собой список, состоящий из одного элемента - атома « кетлин»:

. (кетлин, [])

В следующем примере представлен список, состоящий из трех элементов - «альфа», «бета» и «гамма»:

. (альфа,. (бета,. (гамма, [])))

Другая форма представления списка, в которой употребляются квадратные скобки

Запись списков в виде структуры "./2" является громоздкой, поэтому существует иная форма представления списков. Элементы списка располагаются между квадратными скобками и отделяются друг от друга запятыми. При такой форме записи два списка, представленные выше, примут вид:

. [кетлин] [альфа, бета, гамма]

Заметьте, что здесь нет надобности явно указывать конец списка при помощи символов []. Форма записи списков с использованием квадратных скобок и представление списков в виде структуры "./2" полностью взаимозаменяемы.

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие