Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_ЭкспСист / Лабораторная №6.doc
Скачиваний:
12
Добавлен:
09.02.2015
Размер:
69.63 Кб
Скачать

Лабораторная работа №6. Типы данных.

Цель работы: Изучить определение типа данных для Visual Prolog.

Задание: Написать три консольных приложения, для освоения материала приведенного в лабораторной работе.

Порядок выполнения:

1. Изучить примитивные типы данных Visual Prolog.

2. Реализовать приложение для работы с множествами.

3. Реализовать приложение для освоения операции форматирования.

4. Реализовать приложение использующее пользовательские типы данных.

6.1. Примитивные типы данных

Visual Prolog имеет множество примитивных типов данных:

integer: 3, 45, 65, 34, 0x0000FA1B, 845. Между прочим, 0x0000FA1B – шестнадцатеричное число, то есть, число выраженное в базисе 16, которое имеет следующие цифры: 0, 1, 2,3, 4, 5, 6, 7, 8, 9, A, B,C, D, E, F.

real: 3.45, 3.1416, 2.18E‐18, 1.6E‐19, и т. д.

string: "pencil", "John McKnight", "Cornell University", и т.д.

symbol : "Na", "Natrium", "K", "Kalium", и т.д.

Вы заметили, что символы выглядят очень похоже на строки: оба представляют собой последовательности Unicode знаков. Однако хранятся они по-разному. Символы хранятся в таблице, и Пролог использует их адреса в таблице для их внутреннего представления. Таким образом, если символ встречается в программе много раз, он будет занимать меньше места, чем строка.

6.2. Множества чисел

N является множеством натуральных чисел. Вот как математики записывают элементы

N: {0, 1, 2, 3, 4 … }1.

Z является множеством целых чисел, т. е., Z ={… - 3, -2, -1,0,1,2,3,4 … }.

Когда математик хочет сказать, что элемент является членом множества, он пишет

3  Z

Если он хочет сказать, что что‐то не является элементом множества, например, он хочет сказать, что ‐3 не элемент N, он напишет:

-3  N

Двойная вертикальная черта. Странная запись {x2 || x  N} отображает множество x2 таких, что x является элементом N, или, иначе, множество {0,1,4,9,16,25 …}

Guard. Если вы хотите сказать, что x является элементом N при условии, что x > 10, вы можете написать {x2 || x  N  x > 10}.

Конъюнкция. В математике вы можете использовать символ  чтобы сказать И; таким образом, x > 2  x < 5 означает, что x > 2 И x < 5.

Дизъюнкция. Выражение (x < 2)  (x > 5) означает x < 2ИЛИ x > 5.

Visual Prolog не имеет специального обозначения для множеств, но вы можете использовать списки для их представления. Например, выберите пункт Project/New из панели задач и заполните диалоговое окно Project Settings так:

General

Project Name: zermelo

UI Strategy: console

Обратите внимание, что мы собираемся использовать консольную стратегию, не GUI. Выберите пункт Build/Build из панели задач чтобы вложить прототип класса zermelo1 в дерево проекта. Отредактируйте zermelo.pro как показано ниже. Снова откомпилируйте проект и запустите его, используя Build/Run In Window.

implement zermelo

open core

clauses

classInfo("zermelo", "1.0").

run():-

console::init(),

Q= [tuple(X, Y) || X= std::fromTo(1, 4),

Y= std::fromTo(1, 5)],

stdio::nl,

stdio::write(Q), stdio::nl, stdio::nl,

foreach tuple(Num, Den)= list::getMember_nd(Q) do

stdio::write(Num, "/", Den,", ")

end foreach,

stdio::nl.

end implement zermelo

goal

mainExe::run(zermelo::run).

В записи Цермело это выражение

Q= [tuple(X, Y) || X= std::fromTo(1, 4),

Y= std::fromTo(1, 5)],

записывается так:

Q = {(X, Y) || X [1…4] Y [1…5]}

На обычном русском, Q это список пар (X, Y), таких, что X принадлежит [1,2,3,4], и Y принадлежит [1,2,3,4,5]. Фрагмент

foreach tuple(Num, Den)= list::getMember_nd(Q) do

stdio::write(Num, "/", Den,", ")

end foreach,

говорит компьютеру write(Num, "/", Den,", ") для каждого кортежа (Num, Den), которые являются членами списка Q.

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

p/q где p N и q N.

Соседние файлы в папке Лабы_ЭкспСист