Лабораторная работа №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.