русс | укр

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

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

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

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


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

Вызовы функций

Математическая нотация вызова функции традиционно полагала заключение па­ра­мет­ров вызова в скобки. Эту традицию впоследствии переняли практически все им­пе­ра­тив­ные языки. Однако в функциональных языках принята иная нотация — имя функции от­де­ля­ется от её параметров просто пробелом. В Lisp’е вызов функции length с неким па­ра­мет­ром L записывается в виде списка: (length L). Такая нотация объясняется тем, что боль­шин­ство функций в функциональных языках каррированны.

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

add :: Integer -> Integer -> Integer

add x y = x + y

То ее вызов с конкретными параметрами (например, 5 и 7) будет выглядеть как:

add 5 7

Здесь видно, что нотация Haskell’а наиболее сильно приближена к нотации аб­с­т­рак­т­но­го математического языка. Однако Haskell пошел еще дальше Lisp’а в этом вопросе, и в нем есть нотация для опи­сания не­кар­ри­ро­ван­ных функций, т.е. тип которых нельзя пред­с­та­вить в виде A1 ® (A2 ® ... (An ® B) ... ). И эта нотация, как и в императивных языках программирования, ис­поль­зует круглые скоб­ки:

add (x, y) = x + y

Можно видеть, что последняя запись — это функция с одним аргументом в строгой но­та­ции Haskell’а. С другой стороны для каррированных функций вполне возможно делать час­тичное применение. Т.е. при вызове функции двух аргументов передать ей только один. Как показано в предыдущей лекции результатом такого вызова будет также фун­к­ция. Более чётко этот процесс можно проиллюстрировать на примере функции inc, которая при­бавляет единицу к заданному аргументу:

inc :: Integer -> Integer

inc = add 1

Т.е. в этом случае вызов функции inc с одним параметром просто приведет к вызову фун­кции add с двумя, первый из которых — 1. Это интуитивное понимание понятия частичного при­менения. Для закрепления понимания можно рассмотреть классический пример — функция map (её определение на абстрактном функциональном языке приведено во второй лекции). Вот определение функции map на Haskell’е:

map :: (a -> b) -> [a] -> [b]

map f [] = []

map f (x:xs) = (f x) : (map f xs)

Как видно, здесь использована инфиксная запись операции prefix — двоеточие, только та­кая запись используется в нотации Haskell’а для обозначения или конструирования па­ры. После приведенного выше определения можно произвести следующий вызов:

map (add 1) [1, 2, 3, 4]

Результатом этого вызова будет список [2, 3, 4, 5].

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


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



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


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

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

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


 


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

 
 

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