мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
haskell [17/07/2018 17:36] – [3.7 Определитель списков и диапазоны] vlasov | haskell [10/09/2018 12:53] – [2.1 Ветвления] vlasov | ||
---|---|---|---|
Строка 40: | Строка 40: | ||
**Полезные команды** в ghci: | **Полезные команды** в ghci: | ||
- | :q -- выйти из оболочки; | + | '' |
- | :l <имя программы> | + | '' |
- | :r -- перегрузить текущий модуль; | + | '' |
- | :t <имя функции> | + | '' |
- | :i <имя функции> | + | '' |
Кроме того, надо знать, что выражения в оболочке интерпретатора можно сразу вычислять. | Кроме того, надо знать, что выражения в оболочке интерпретатора можно сразу вычислять. | ||
- | Наберем 2 + 2 и нажмем Enter, или наберем abs (-2) и нажмем Enter, и т.д. | + | Наберем 2 + 2 и нажмем Enter, или наберем |
Новые функции (пользовательские) можно задавать, | Новые функции (пользовательские) можно задавать, | ||
Строка 58: | Строка 58: | ||
> let {f :: Int -> Int; f n = n * 2} | > let {f :: Int -> Int; f n = n * 2} | ||
</ | </ | ||
+ | |||
+ | Отметим, | ||
Многострочные записи делают следующим образом: | Многострочные записи делают следующим образом: | ||
Строка 76: | Строка 78: | ||
</ | </ | ||
- | Для просмотра тех или иных значений функции f можно попробовать набрать f 4, а для просмотра произвольного значения foo набрать show foo. | + | Для просмотра тех или иных значений функции |
Строка 90: | Строка 92: | ||
и мы уже вряд ли сможем посчитать факториал с аргументом более 31. | и мы уже вряд ли сможем посчитать факториал с аргументом более 31. | ||
- | Остальной код задан в виде уравнений, | + | Остальной код задан в виде уравнений, |
- | Возможно использование рекурсии при описании функции. При вызове функций им передается | + | |
<code haskell> | <code haskell> | ||
Строка 136: | Строка 137: | ||
В Haskell возможно описание вычисления функции в | В Haskell возможно описание вычисления функции в | ||
зависимости от условий в более-менее традиционном ключе, для чего | зависимости от условий в более-менее традиционном ключе, для чего | ||
- | присутствуют операторы if и case. Однако, | + | присутствуют операторы |
аналогичных операторов в императивных языках. (Правильнее их называть | аналогичных операторов в императивных языках. (Правильнее их называть | ||
- | выражениями с использованием case- и if-then-else-конструкций) | + | выражениями с использованием |
< | < | ||
Строка 147: | Строка 148: | ||
</ | </ | ||
- | Оператор if предназначен для ветвления вычислительного процесса в | + | Ключевое слово '' |
- | зависимости от условия булевского типа. Части then и else обязательны, | + | зависимости от условия булевского типа. Части |
в отличие от императивного аналога задают не порядок действий, | в отличие от императивного аналога задают не порядок действий, | ||
- | которые возвращают результат для задаваемой функции. Данный оператор | + | которые возвращают результат для задаваемой функции. Данное |
- | частным, | + | частным, |
Иными словами, | Иными словами, | ||
Строка 167: | Строка 168: | ||
</ | </ | ||
- | Рассмотрим более сложные примеры с case-выражениями: | + | Рассмотрим более сложные примеры с '' |
< | < | ||
Строка 182: | Строка 183: | ||
</ | </ | ||
- | Последний пример является комбинацией использования case-выражения с << | + | Последний пример является комбинацией использования |
для предотвращения применения функции для отрицательных аргументов. | для предотвращения применения функции для отрицательных аргументов. | ||
Стоит также упомянуть, | Стоит также упомянуть, | ||
- | рассматривать как упрощенную запись с соответствующими case-выражениями. | + | рассматривать как упрощенную запись с соответствующими |
- | **__Упражнение__.** Задать функцию sign(x) из предыдущего упражнения, | + | **__Упражнение__.** Задать функцию |
==== 2.2 Карринг и лямбда-абстракция ==== | ==== 2.2 Карринг и лямбда-абстракция ==== |