Click HERE to return to our International home page
Концепты Заметки МЕТА Флэнг Онлайн Модули Библио Форум



ГлавнаяФлэнг > Описание > Атомы 
 






• Факториал
• Арифметика
• Пример логической программы
• Структуры и термы
• Атомы
• Списки во Флэнге
• XML- документы
• Векторы
• Таблицы
• Перечисления
• XML-документы (продолжение)



Описание встроенных функций

 



Атомы (atoms.fln)

Атомы - специальные константы, играющие роль имен. Синтаксически атомы отличаются от переменных тем, что переменные начинаются либо с заглавной буквы, либо со знака подчеркивания, а атомы - со строчных букв (это традиция, ведущая начало с пролога Dec-10 Дэвида Уоррена). Атом как константа равен "самому себе". Короткий диалог с Флэнг-системой:
?- Atom;

S0_0
Atom = S0_0


?- atom;

atom

?- Atom1 = Atom2;

true
Atom1 = S0_0
Atom2 = S0_0


?- atom1 = atom2;

fail
показывает, что переменная Atom с точки зрения интерпретатора - всего лишь место в памяти (в нашем примере - с адресом S0_0), а вот значение атома - сам атом. Сравнение двух переменных (Atom1 и Atom2) приводит к успеху, хотя при этом и накладываются условия на то, что обе переменные должны обозначать один и тот же объект. Сравнение двух неравных атомов приводит к неудаче.

Мы уже активно пользовались атомами при решении логической задачи о генеалогическом древе. Там атомы использовались для именования людей. Способ применения атомов в той задаче - чисто прологовский. Однако в отличие от пролога, атом во Флэнге не только именует какие-то абстрактные объекты, но и может нести об этом объекте некоторую дополнительную информацию. Это делается через присваивание атому атрибута:

?- number := 3;

true
После этого, атому number присваивается атрибут 3. Имеется операция взятия значения атрибута '^':
?- number;

number

?- ^number;

3
Атом не может иметь более одного атрибута. С другой стороны, атрибутом атома может быть любой объект Флэнга:
?- list := [1,2,3,4,5];

true

?- head([X|Y]) :- X;

?- head(X) :- not_a_list;

?- head(list);

not_a_list

?- head(^list);

1
В последнем примере мы присваиваем атому list атрибут, являющийся списком из пяти чисел, затем определяем функцию head, которая возвращает голову аргумента, если это список, или извещает о том, что аргумент - не список, в противном случае. Поскольку значение head во втором правиле - также атом (not_a_list), то ему мы также можем присвоить атрибут:
?- not_a_list := "не список";

true

?- ^head(list);

"не список"

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

В качестве примера приведем программу, организующую ввод пользователем с консоли строк, и собирающую введенные строки в атоме collect. Работа программы завершается при вводе пустой строки. Программа возвращает список введенных строк. Заметим, что при реализации программы можно спокойно обойтись без использования атомов, так что атомы в программе появляются лишь с целью демонстрации работы с ними.


Программа на Флэнге (atoms.fln):

  ?- collect := [];

readInput() :-
write("input> "),
addInput(read())
;

addInput(Input) :- Input = nl(), ^collect;
addInput(Input) :-
collect := [sTrim(Input) | ^collect],
readInput();

?- readInput();


mПримечания

  • В данном примере атом collect используется как глобальная переменная. При загрузке программы атрибутом атома определяется пустой список []. Включение в программу
      ?- Флэнг-выражение;
    означает, что Флэнг-система должна вычислить выражение непосредственно в процессе загрузки программы.
  • Функция readInput/0 обеспечивает основной цикл чтения со стандартного входного потока (консоли).
  • Функция addInput/1 проверяет, не ввел ли пользователь пустую строку (состоящую только из перевода каретки). Если строка пустая, то работа программы завершается и выдается список строк, введенных пользователем и накопленных в атоме collection. Это первое правило функции. Если строка непустая, то она добавляется в collect (второе правило).
  • Встроенная функция write/1 выдает в стандартный выходной поток значение своего аргумента.
  • Встроенная функция read/0 читает из стандартного входного потока очередную строчку.
  • Встроенная функция nl/0 возвращает строку, содержащую набор символов, обозначающих возврат каретки и перевод на новую строку. Первое правило для addInput/1 проверяет, не ввел ли пользователь пустую строку, и если да, то завершает вычисления.
  • Встроенная функция sTrim/1 удаляет пробельные символы (включая символы табуляции и перевода строки) с концов строки-аргумента.
  • Последняя строка программы - вызов основной функции, запускающий процесс.


Работа в интерпретаторе:

?- load(atoms);

input> hello
input> how are things?
input> see you
input>

["see you", "how are things?", "hello"]


m Что делалось

Программа выдает приглашение к вводу ("input>"). Вводим три строки, затем пустую строку, чтобы завершить работу. Обратите внимание, что в списке строки расположены в обратном порядке, поскольку очередные строки добавлялись в список в качестве головы (первого элемента).







Контакты
664003 Иркутск, ул. К. Маркса, 1, Иркутский государственный университет, Центр новых информационных технологий

email

 

Заметки*
Открытая система
Пакетирование
XML
Тексты
Естественнонаучные ресурсы
Ресурсы как модели
Форматы ресурсов
Информационные уровни
Трудности
Учебные объекты
"Опыт человечества"
Коммуникативные системы
О пользе RSS
Проблема интернета
Осмысленный интернет
Идентификация ресуров
Метаданные и будущее
Дублинское ядро
Метаданные и знания
Онтологии
*Набор кратких заметок и высказываний, посвященных различным аспектам информатизации образования. Что называется - "заметок по поводу...".

Онлайн-сервисы**
• Сайт кафедры математического анализа
Форум с поддержкой математических формул.
• Flang-online
• TeX->MathML->GIF.
• MathML->GIF.
• Flang-Meta.
QTI-тестирование с поддержкой математических формул.
• Meta-ZIP
• UDC
• Font-Test
**список эксперементальных сервисов, на которых апробировались реализуемые группой технологии. Сервисы созданы на основе базовых модулей.

Библиотека***
Онтологии и метаописания
Учебные объекты
Языки программирования и логика
eLearning and Knowledge
Digital Libraries and Repositories
Книжки и учебники
***Коллекция публикаций по тематике, собранная из открытых интернет-источников.




.



Copyright ® 2002-2005, TeaCODE.com