Архив категории ‘Основы языка Haskell’

Функционалы из Prelude. Функционалы-преобразователи

    На этом шаге мы рассмотрим функционалы этого типа.     Перечислим функционалы этой группы.     1. Функционал, применяющий заданную функцию к каждому элементу входного списка и возвращающий преобразованный исходный список: map:: (a -> b) -> [a] -> [b] map f lst Например: > map abs [-1,2,-3] > map sqrt [0,4,9,16,25] [1,2,3] [0.0,2.0,3.0,4.0,5.0]     2. Функционал, […]

Функционалы (функции высшего порядка). Классификация функционалов

    На этом шаге мы приведем классификацию функционалов. Определение [1]. (1) Аппликативными (применяющими) функционалами называют функции, которые позволяют вызывать другие функции.    Другими словами, аппликативные функционалы применяют функциональный аргумент к своим формальным параметрам. (2) Отображающие функционалы (MAP-функции) - это функции, которые отображают исходный список в новый список или порождают побочный эффект, связанный с исходным списком. (3) Объединяющие функционалы - […]

Функционалы (функции высшего порядка). Понятие «функционал»

    На этом шаге мы рассмотрим это понятие. Определение. [1]  Функционалом называется отображение f произвольного множества X в множество  R действительных или  C комплексных чисел. [2, с.18]  Функционал - это оператор со значениями в поле скаляров.    Замечания. Термин "функционал" введён Ж.Адамаром (1903). В математической литературе термины "оператор" и "функционал" часто используются как синонимы. Определение. Функционал […]

Функционалы (функции высшего порядка). О стилях программирования

    На этом шаге мы рассмотрим понятия аппликативного и функционального программирования.     Будем различать аппликативное и функциональное программирование.     Аппликативный стиль основан на использовании при построении текста программы понятий "функция" и "аппликация" (применение функции); функционалы при этом моделируются.     Функциональный стиль основан на использовании понятий "функция" и "функционал"; функционалы при этом уже заданы. Это программирование […]

Генерация псевдослучайных чисел и списков

    На этом шаге мы рассмотрим вопросы генерации таких чисел.     Воспользуемся простым, но вполне качественным алгоритмом для получения целых чисел, равномерно распределённых на интервале [0,2147483647].     Приведём его реализацию на языке Haskell [1, с.144]: next_seed:: Int -> Int next_seed n = case test>0 of True -> test False -> test+2147483647 where test = 48271*lo-3399*hi […]

Моделирование массивов на языке Haskell. Задачи для самостоятельного решения

    На этом шаге мы приведем задачи для самостоятельного решения.    Замечание. Найдите ошибки, описки, неточности и прочие изъяны в приведенных задачах. 1. Моделирование векторов (одномерных массивов) на базе одноуровневых списков     1*. Напишите функцию, переставляющую местами второй и предпоследний элементы заданного вектора.     2*. Определите, имеются ли в целочисленном векторе два подряд идущих элемента, равных […]

Моделирование массивов на языке Haskell (общие сведения)

    На этом шаге мы приведем общие сведения о массивах.     Архитектура большинства компьютеров по технологическим причинам строится так, что программные переменные располагают в линейном (одномерном) порядке. Это имеет далеко идущие последствия, касающиеся распространённых программистских привычек. В частности, если в процессе программирования понадобилось большое количество переменных для объектов одного и того же типа, то рекомендуется […]

Поиск и сортировка элементов в списке. Задачи для самостоятельного решения

    На этом шаге мы приведем задачи для самостоятельного решения.    Замечание. Найдите ошибки, описки, неточности и прочие изъяны в приведенных задачах. 1. Применение сортировки списков     1*. Используя любой алгоритм сортировки, в одноуровневом числовом списке найдите максимальный элемент.     2*. Используя любой алгоритм сортировки, в одноуровневом числовом списке найдите элемент, ближайший к минимальному.     3*. […]

Поиск и сортировка элементов в списке. Встроенная функция для сортировки списков

    На этом шаге мы рассмотрим эту функцию.     Функция, производящая сортировку элементов целочисленного списка в возрастающем порядке имеет следующий синтаксис: sort lst Например, > sort [1] > sort [-2,-4,3,-5,12] [1] [-5,-4,-2,3,12]    Замечание (важное). Для работы с функцией требуется подключить модуль List: > :load List     Приведем несколько демонстрационных примеров. -- Демонстрация реализации быстрой сортировки […]

Алгоритмы внутренней сортировки. Быстрая сортировка

    На этом шаге мы рассмотрим этот метод сортировки.     Алгоритм сортировки, разработанный английским информатиком Ч.Хоаром действует следующим образом. На первом этапе выбирается элемент, называемый опорным элементом. Далее необходимо расположить элементы таким образом, чтобы элементы меньше опорного находились слева, а больше или равные элементы находились справа.     Далее необходимо рекурсивно повторить поиск для левых и […]