Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора_ФиЛП.doc
Скачиваний:
54
Добавлен:
16.09.2019
Размер:
150.02 Кб
Скачать

7.Факты в Прологе

Факт –одиночная цель которая безусловно истина

Предложения с пустым Телом называются Фактами. Пример факта:

Кот(Иван).

оно эквивалентно правилу:

Кот(Иван) :- ИСТИНА.

9. Списки в Прологе.

В Прологе список (list) является объектом, содержащим внутри произвольное число других объектов. Списки соответствуют, грубо говоря, массивам в других языках, но, в отличие от массивов, список не трубует декларирования его размера до начала его использования.

Список, содержащий числа 1, 2 и 3 записывается как

[ 1, 2, 3 ]

Порядок элементов в этом списке значим:

  • Число "1" является первым элементом,

  • "2" - второй,

  • "3" - третий.

Список [ 1, 2, 3 ] и список [ 1, 3, 2 ] различны.

Каждый компонент списка называется элемент (element). Для того, чтобы сформировать списковую структуру данных, следует разделять элементы запятыми и заключать их всех в квадратные скобки. Посмотрим на некоторые примеры:

["dog", "cat", "canary"]

["valerie ann", "jennifer caitlin", "benjamin thomas"]

Один и тот же элемент может быть представлен в списке несколько раз, например:

[ 1, 2, 1, 3, 1 ]

10. Списки в Лиспе

Списки в языке Lisp играют важную роль как по историческим, так и по практическим причинам. Изначально списки были основным составным типом данных в языке Lisp, и в течении десятилетий они были единственным составным типом данных. В наши дни, программист на Common Lisp может использовать как типы vector, hash table, самостоятельно определённые типы и структуры, так и списки.

Списки остаются в языке потому, что они являются прекрасным решением для определённого рода проблем. Одна из них - проблема представления кода, как данных для трансформации и генерации кода в макросах - является специфичной для языка Lisp, и это объясняет то, как другие языки обходятся без списков в стиле Lisp. Вообще говоря, списки - прекрасная структура данных для представления любых неоднородных и/или иерархических данных. Кроме того они достаточно легковесны и поддерживают функциональный стиль программирования - ещё одна важная часть наследия Lisp. Список обозначается как набор разделенных пробелами (одним или несколькими) элементов списка, заключенные в круглые скопки:

(<элемент1> <элемент2> <элемент3> ... <элементN>)

Элементами списка могут быть другие списки или АТОМЫ (второе базовое понятие в списке).

Атом - как и в физике (до недавнего времени :) ) обозначает нечто неделимое, например числа или символы.

(Более точные определения терминов мы дадим позже)

Например:

( (12 36 78) йцукен qwerty t () another-symbol)

Здесь приведен список состоящий соответственно из другого списка: (12 36 78) из символов йцукен и qwerty, специальных символов t (обозначающего "истинность") и () - (пустой список, то есть не содержащий ни одного элемента, он еще обозначает "ложь") и еще одного символа по имени enother-symbol.

11. Типы данных Turbo Prolog

В Turbo Prolog’е существуют следующие простые типы данных:

char - символ (размер 1 байт)

integer - целое число (размер 2 байта)

real - действительное число (размер 8 байт)

string - последовательность символов типа char, которая заключена в кавычки

symbol - последовательность букв латинского алфавита, цифр и знаков подчеркивания, которая начинается со строчной буквы или заключена в кавычки.

Также существуют дополнительные типы данных

ref - ссылочный номер базы данных

dbasedom - определяет объект в терме для глобальных баз данных

bt_selector - возвращаемый указатель бинарного дерева

db_selector - определенный пользователем указатель внешней базы

данных

place - переменная области размещения, принимает значения:

in_memory - в памяти;

in_ems - в расширенной памяти;

in_file - в файле

file - файловая переменная, принимает значения:

keyboard - клавиатура;

screen - экран;

printer - принтер;

com1; stdin; stdout - стандартные порты ввода/вывода

... - другие значения, присвоенные пользователем

reg - переменная для обращения к регистрам ОЗУ, принимает значение:

reg(AX,BX,CX,DX,SI,DI,DS,ES)

bgi_ilist - список целых для предикатов BGI-графики.

Также особенность данной системы является особый тип данных, называемый список. Список может содержать значения доменов определенного типа или же подсписок.

Для работы со списками существует одна единственная операция: разделение на голову и хвост.

Голова - это первый элемент списка. Хвост - остальная часть.

С помощью одной-единственной операции со списком можно проводить разнообразные действия, такие как вставка и удаление элемента, поиск элемента, подсчет длины списка и сортировка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]