мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
haskell [17/07/2018 17:36] – [3.7 Определитель списков и диапазоны] vlasovhaskell [10/09/2018 12:22] – [Урок 2. Способы определения функций] vlasov
Строка 40: Строка 40:
 **Полезные команды** в ghci: **Полезные команды** в ghci:
  
-:q -- выйти из оболочки;+'':q'' -- выйти из оболочки;
  
-:l <имя программы> -- загрузить программу с указанным именем. Программа может не содержать модуля Main, а только определения функций (что мы и будем делать первое время);+'':l <имя программы>'' -- загрузить программу с указанным именем. Программа может не содержать модуля Main, а только определения функций (что мы и будем делать первое время);
  
-:r -- перегрузить текущий модуль;+'':r'' -- перегрузить текущий модуль;
  
-:t <имя функции> -- напечатать сигнатуру функции;+'':t <имя функции>'' -- напечатать сигнатуру функции;
  
-:i <имя функции> -- напечатать сигнатуру функции и указать, в каком файле была определена данная функция;+'':i <имя функции>'' -- напечатать сигнатуру функции и указать, в каком файле была определена данная функция;
  
 Кроме того, надо знать, что выражения в оболочке интерпретатора можно сразу вычислять. Кроме того, надо знать, что выражения в оболочке интерпретатора можно сразу вычислять.
-Наберем 2 + 2 и нажмем Enter, или наберем abs (-2) и нажмем Enter, и т.д.+Наберем 2 + 2 и нажмем Enter, или наберем ''abs (-2)'' и нажмем Enter, и т.д.
  
 Новые функции (пользовательские) можно задавать, как уже писалось выше, в отдельных файлах и подгружать по мере необходимости, либо сразу определять в оболочке: Новые функции (пользовательские) можно задавать, как уже писалось выше, в отдельных файлах и подгружать по мере необходимости, либо сразу определять в оболочке:
Строка 58: Строка 58:
 > let {f :: Int -> Int; f n = n * 2} > let {f :: Int -> Int; f n = n * 2}
 </code> </code>
 +
 +Отметим, что в версиях ''ghc/ghci'', начиная с 8.0.2, ключевое слово ''let'' писать необязательно.
  
 Многострочные записи делают следующим образом: Многострочные записи делают следующим образом:
Строка 76: Строка 78:
 </code> </code>
  
-Для просмотра тех или иных значений функции f можно попробовать набрать f 4, а для просмотра произвольного значения foo набрать show foo.+Для просмотра тех или иных значений функции ''f'' можно попробовать набрать ''f 4'', а для просмотра произвольного значения ''foo'' набрать ''show foo''.
  
  
Строка 90: Строка 92:
 и мы уже вряд ли сможем посчитать факториал с аргументом более 31. и мы уже вряд ли сможем посчитать факториал с аргументом более 31.
  
-Остальной код задан в виде уравнений, которые через сопоставление с образцами (pattern matching) задают нужное значение функции. Образцы рассматриваются по порядку.  +Остальной код задан в виде уравнений, которые через сопоставление с образцами (pattern matching) задают нужное значение функции. Образцы рассматриваются по порядку. Возможно использование рекурсии при описании функции. При вызове функций им передаются из аргументов выражения, вычисляемые по необходимости и это следует учитывать особенно при программировании рекурсивных функций, так возможен большой расход оперативной памяти (частично это как раз преодолевается грамотным использованием так называемой //ленивости вычислений//)
-Возможно использование рекурсии при описании функции. При вызове функций им передается копия аргументов и это следует учитывать особенно при программировании рекурсивных функций, так возможен большой расход оперативной памяти (частично это преодолевается грамотным использованием так называемой //ленивости вычислений//)+
  
 <code haskell> <code haskell>