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



Главная  > Флэнг > Описание > Арифметика 
 






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



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

 



Арифметика (arith.fln)

Еще один классический пример: задача построения арифметических функций с помощью константы 0 и операции прибавления 1 (операции следования) - s(X) = X+1. Числа в этом случае имеют следующий вид:
0=0; 1=s(0), 2=s(s(0)), 3=s(s(s(0)))
и т.д. Например, операция сложения определяется через s(X) следующим образом:
plus(0, Y) = Y
plus(s(X), Y) = s(plus(X, Y))
Определим на Флэнге операции сложения, умножения и факториал.
Программа на Флэнге (arith.fln):

?-  struct("s/1");

plus(0, Y) :- Y;
plus(s(X), Y) :- s(plus(X, Y));

mult(0, Y) :- 0;
mult(s(X), Y) :- plus(Y, mult(X,Y));

fact(0) :- s(0);
fact(s(X)) :- mult(s(X), fact(X));

fold(0) :- 0;
fold(s(X)) :- 1+fold(X);


mПримечания

  • Строка
    ?-  struct("s/1");
    в теле программы означает, что в момент загрузки программы должен быть вызван Флэнг-интерпретатор для вычисления запроса struct("s/1").
  • Операция прибавления единицы представлена в этой программе с помощью терма s(X). Чтобы подсказать Флэнг-системе, что s(X) является структурой, а не вызовом функции, используется специальная операция struct, декларирующая новую структуру. Аргументом struct является строка, задающая имя структуры и количество аргументов.
  • Функция fold - вспомогательная. Она считает количество "s" в терме. Например, fold(s(s(0))) = 2.


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

?- plus(s(s(s(0))), s(s(0)));

s( s( s( s( s(0)))))

?- mult(s(s(s(0))), s(s(0)));

s( s( s( s( s( s(0))))))

?- fact(s(s(s(s(s(0))))));

s( s( s( s( s( s( s( s( s( s( s( s( s( s( s(
s( s( s( s( s( s( s( s( s( s( s( s( s( s( s( s
( s( s( s( s( s( s( s( s( s( s( s( s( s( s( s(
s( s( s( s( s( s( s( s( s( s( s( s( s( s( s(
s( s( s( s( s( s( s( s( s( s( s( s( s( s( s( s
( s( s( s( s( s( s( s( s( s( s( s( s( s( s( s(
s( s( s( s( s( s( s( s( s( s( s( s( s( s( s(
s( s( s( s( s( s( s( s( s( s( s( s( s(0)))))))
))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))


?- fold(fact(s(s(s(s(s(s(s(0)))))))));

5040


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

Сначала нашли сумму 3+2. Затем нашли произведение 3*2. Следующий шаг - вычисление 5!. В результате получили терм со ста двадцатью "s". Наконец, вычислили факториал 7. Поскольку получается слишком длинный терм, вывели его не напрямую, а с помощью функции fold подсчитали число "s".







Контакты
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