русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Инфиксный способ записи функций

Для некоторых функций возможен инфиксный способ записи, такие функции обычно пред­ставляют собой простые бинарные операции. Вот как, например, определены опе­ра­ции конкатенации списков и композиции функций:

Пример 4.4. Инфиксная операция конкатенации списков.

(++) :: [a] -> [a] -> [a]

[] ++ ys = ys

(x:xs) ++ ys = x : (xs ++ ys)

Пример 4.5. Инфиксная операция композиции функций.

(.) :: (b -> c) -> (a -> b) -> (a -> c)

f . g = \x -> f (g x)

Т.к. инфиксные операции всё-таки являются функциями в смысле Haskell’а, т.е. они кар­рированы, то имеет смысл обеспечить возможность частичного применения таких фун­к­ций. Для этих целей имеется специальная запись, которая в Haskell’е носит название "сек­ция":

(x ++) = \x -> (x ++ y)

(++ y) = \y -> (x ++ y)

(++) = \x y -> (x ++ y)

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

Если какая-либо функция принимает два параметра, то её также можно записывать в ин­фиксной форме. Однако если просто записать между параметрами имя функции — это бу­дет ошибкой, т.к. в строгой нотации Haskell’а, это будет просто двойным применением, при­чем в одном применении не будет хватать одного операнда. Для того чтобы записать фун­кцию в инфиксной форме, её имя необходимо заключить в символы обратного апо­с­т­ро­фа — `.

Для вновь определённых инфиксных операций возможно определение порядка вы­чис­ле­ния. Для этого в Haskell’е есть зарезервированное слово infixr, которое назначает за­дан­ной операции степень её значимости (порядок выполнения) в интервале от 0 до 9, при этом 9 объявляется самой сильной степенью значимости (число 10 также входит в этот ин­тер­вал, именно эту степень имеет операция применения). Вот так определяются степени для определенных в примерах 4.4 и 4.5 операций:

infixr 5 ++

infixr 9 .

Остается отметить, что в Haskell’е все функции являются нестрогими, т.е. все они под­дер­живают отложенные вычисления. Например, если какая-то функция определена как:

bot = bot

При вызове такой функции произойдет ошибка, и обычно такие ошибки сложно от­с­ле­жи­вать. Но если есть некая константная функция, которая определена как:

constant_1 x = 1

То при вызове конструкции (constant_1 bot) никакой ошибки не произойдёт, т.к. значение функции bot в этом случае не вычислялось бы (вычисления отложенные, значение вычисляется только тогда, когда оно действительно требуется). Результатом вычисления естественно будет число 1.

Просмотров: 1343


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.