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



ГлавнаяФлэнг > Описание > Функции и структуры  
 






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



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

 



Функции и структуры (funcstruc.fln)

Функции во Флэнге различаются по двум признакам:
  1. имени
  2. числу аргументов
Например, f в следующих выражениях
  f(5)
f(X, hello)
имя двух разных функций - одного и двух аргументов, соответственно. Чтобы учесть этот факт, во Флэнге часто используется описание функции в виде строки, явно включающей как имя, так и количество аргументов: "f/1", "f/2".

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

  person(Имя, Фамилия, ГодРождения)
аналогична записи (объекту класса) с именем person (персона)и полями Имя, Фамилия и ГодРождения. Например, Ивана Иванова 1945 года рождения может представлять следующая структура:
  person("Иванов", "Иван", 1945)
Синтаксически структуры неотличимы от вызовов функций, поэтому необходимо явно указывать Флэнг-системе, какие имена являются именами структур. Для этого существует операция struct, которой мы пользовались в примеры из арифметики, когда определяли в виде структуры операцию следования s(X). Причем если структуры встречаются в тексте программы, то имя структуры должно быть декларировано перед первым ее вхождением в программу. Это делается включением в текст программы запроса, например,
  ?- struct("person/3")
После этого person с тремя аргументами будет пониматься Флэнг-системой не как применение функции person к своим аргументам, а как структура, имеющая три поля.

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

НЕ НУЖНА


mПримечания

НЕТ


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

(1)?- person("Иванов", "Иван") :- 1945;

(2)?- person("Иванов", X);

1945
X = "Иван"


(3)?- person("Иванов", "Иван", 1945);

*** RunError: Function 'person/3' not defined

(4)?- struct("person/3");

true

(5)?- person("Иванов", "Иван", 1945);

person("Иванов", "Иван", 1945)

(6)?- getName(person(_, Name, _)) :- Name;

(7)?- getName(person("Иванов", "Иван", 1945));

"Иван"

(8)?- struct("person/2");

*** RunError: Functor person/2 is already
in use in 'struct/1'


Что делалось

Последовательность работы с интерпретатором
  1. Определяем двуместную функцию 'person', вычисляющую по имени-фамилии год рождения. Обратите внимание, что правила можно не только загружать из программы, но и вводить непосредственно во Флэнг-интерпретаторе.
  2. Вызываем функцию person/2 с первым аргументом 'Иванов'. Флэнг-система находит значение функции, уточняя при этом второй аргумент
  3. Делаем запрос person("Иванов", "Иван", 1945). Флэнг-система выдает ошибку, поскольку person/3 не определена ни как функция, ни как структура.
  4. Определяем person/3 как структуру.
  5. Повторяем запрос person("Иванов", "Иван", 1945). Терм, определяемый структурой person/3, равен сам себе.
  6. Определяем функцию getName, которая, получая на вход структуру person/3, возвращает имя персоны. Обратите внимание на использование "пустой" переменной '_'. Она используется в тех случаях, когда значение соответствующего аргумента или поля нас совсем не интересует.
  7. Находим имя Иванова.
  8. Пытаемся определить как структуру person/2. Система не позволяет это сделать, поскольку person/2 уже используется как функция.







Контакты

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