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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
haskell [15/09/2018 15:02] – [2.6 Использование монады состояния] vlasovhaskell [29/09/2018 21:15] – [Ссылки на важные ресурсы по Haskell] vlasov
Строка 25: Строка 25:
   - [[http://habrahabr.ru/post/193722/|Haskell в продакте: Отчёт менеджера проекта]]   - [[http://habrahabr.ru/post/193722/|Haskell в продакте: Отчёт менеджера проекта]]
   - [[http://ru-lambda.livejournal.com/3212.html|Haskell: что это такое]]   - [[http://ru-lambda.livejournal.com/3212.html|Haskell: что это такое]]
-  - [[http://dev.by/blogs/main/esli-by-yazyki-programmirovaniya-byli-mashinami|Если бы языки программирования были машинами (шуточное :-))]]+  - [[https://events.dev.by/lenta/main/esli-by-yazyki-programmirovaniya-byli-mashinami|Если бы языки программирования были машинами)]], [[https://events.dev.by/lenta/main/esli-by-yazyki-programmirovaniya-byli-religiyami|Если бы языки программирования были религиями)]]  (шуточное :-)
   - [[http://anton-k.github.io/ru-haskell-book/book/home.html|Учебник по Haskell. Антон Холомьёв]] (пока лучший учебник на русском!!)   - [[http://anton-k.github.io/ru-haskell-book/book/home.html|Учебник по Haskell. Антон Холомьёв]] (пока лучший учебник на русском!!)
   - [[https://www.ohaskell.guide/|Шевченко Д. О Haskell по-человечески]]   - [[https://www.ohaskell.guide/|Шевченко Д. О Haskell по-человечески]]
Строка 383: Строка 383:
 </note> </note>
  
-Вот версия более простого и понятного примера:+<note> 
 +Как показали дальнейшие изыскания, изначальное поведение было обусловлено ещё одной проблемой Haskell, так называемом //ограничением мономорфизма//: 
 +[[https://wiki.haskell.org/Monomorphism_restriction|Monomorphism_restriction]]. В современных версиях ghci это ограничение отключено, но при желании его можно вновь включить и потестировать указанные выше странности: 
 +<code> 
 +Prelude> :set -XMonomorphismRestriction 
 +Prelude> let x = 2 
 +Prelude> x + 2.0 
 + 
 +<interactive>:5:5: error: 
 +    * No instance for (Fractional Integer) 
 +        arising from the literal `2.0' 
 +... 
 +</code> 
 +</note> 
 + 
 + 
 +Вот версия более простого и понятного примера, без странностей ограничения мономорфизма:
  
 <code haskell> <code haskell>
Строка 394: Строка 410:
       In an equation for `it': it = x + y       In an equation for `it': it = x + y
 </code> </code>
-В языках типа Си это соответствовало бы объявлению и инициализации переменных типа Int и Double, а потом совместного их использования в одном арифметическом выражении.+В языках типа Си это соответствовало бы объявлению и инициализации переменных типа int и double, а потом совместного их использования в одном арифметическом выражении.
 ==== 2.6 Использование монады состояния==== ==== 2.6 Использование монады состояния====
  
Строка 438: Строка 454:
 (везде ниже ''xs'', ''ys'' и т.п. обозначают список) (везде ниже ''xs'', ''ys'' и т.п. обозначают список)
  
-  * ''xs !! n'' --- получим n-й произвольный элемент списка xs, начиная с нулевого; +  * ''xs !! n'' --- получим n-й произвольный элемент списка ''xs'', начиная с нулевого; 
-  * ''head xs'' --- вернет //первый// элемент списка xs; +  * ''head xs'' --- вернет //первый// элемент списка ''xs''
-  * ''last xs'' --- вернет //последний// элемент списка xs; +  * ''last xs'' --- вернет //последний// элемент списка ''xs''
-  * ''tail xs'' --- вернет список xs без //первого// элемента; +  * ''tail xs'' --- вернет список ''xs'' без //первого// элемента; 
-  * ''init xs'' --- вернет список xs без //последнего// элемента;+  * ''init xs'' --- вернет список ''xs'' без //последнего// элемента;
   * ''reverse xs'' --- вернет обратный список;   * ''reverse xs'' --- вернет обратный список;
-  * ''length xs''  --- вернет длину списка xs;+  * ''length xs''  --- вернет длину списка ''xs'';
  
 ==== 3.2 Добавление к списку === ==== 3.2 Добавление к списку ===