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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
haskell [22/10/2018 01:50] – [5.6 Классы типов и АТД] vlasovhaskell [09/03/2019 20:38] (текущий) – [Урок 8.1 Восходящий Парсер] vlasov
Строка 1200: Строка 1200:
  
 <code haskell> <code haskell>
-infixl 7 (&&&) +infixl 7 &&& 
-infixl 5 (|||)+infixl 5 |||
 </code> </code>
  
Строка 1296: Строка 1296:
 </code> </code>
  
-Для многострочных программ нам необходимо использовать ключевой слово <nowiki>do</nowiki>, полный смысл которого будет ясен при изучении монад.+Для многострочных программ нам необходимо использовать ключевое слово <nowiki>do</nowiki>, полный смысл которого будет ясен при изучении монад.
  
 Вот как осуществляется получение аргументов командной строки в самом простом случае: Вот как осуществляется получение аргументов командной строки в самом простом случае:
Строка 1336: Строка 1336:
 ==== Урок 6.2 Взаимодействие с STDIN-STDOUT ==== ==== Урок 6.2 Взаимодействие с STDIN-STDOUT ====
  
-Список базовых функций ввода-вывода может быть найден тут: [[http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#g:24|Basic Input and output]]+Список базовых функций ввода-вывода может быть найден тут: [[https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base-4.12.0.0/Prelude.html#g:25|Basic Input and output]]
 или на русском языке тут: или на русском языке тут:
 [[http://www.haskell.ru/io-13.html|Haskell-98. Основные операции ввода-вывода]]. [[http://www.haskell.ru/io-13.html|Haskell-98. Основные операции ввода-вывода]].
Строка 1547: Строка 1547:
   writeFile "testUp.txt" (unlines up_lst)   writeFile "testUp.txt" (unlines up_lst)
 </code> </code>
-Здесь "чистая функция" transform преобразует в строках символы к верхнему регистру. "Чистая функция" ''lines'' разбивает входящую строку на список строк по признаку конца строки, а функция ''unlines'', наоборот, получив список строк, склеивает их в одну.+Здесь "чистая функция" ''transform'' преобразует в строках символы к верхнему регистру. "Чистая функция" ''lines'' разбивает входящую строку на список строк по признаку конца строки, а функция ''unlines'', наоборот, получив список строк, склеивает их в одну.
  
 Работа с "чистыми функциями" в монадическом коде (для нас пока это означает "внутри блока ''do''") должна осуществляться с помощью конструкции ''let''. Работа с "чистыми функциями" в монадическом коде (для нас пока это означает "внутри блока ''do''") должна осуществляться с помощью конструкции ''let''.
Строка 1554: Строка 1554:
 ==== 6.6 Запуск и компиляция ==== ==== 6.6 Запуск и компиляция ====
  
-Запуск подготовленных указанным выше способом возможен разными путями. +Запуск подготовленных указанным выше способом файлов возможен разными путями. 
 Во-первых, мы можем по-прежнему из ''ghci'' загружать нужный файл и указывать на выполнение функцию ''main''. Во-первых, мы можем по-прежнему из ''ghci'' загружать нужный файл и указывать на выполнение функцию ''main''.
  
Строка 1594: Строка 1594:
  
 <code haskell> <code haskell>
-data Maybe a = Nothing | Just a+data Maybe a = Nothing | Just a deriving (Eq, Ord)
 </code> </code>
 (Напомним, здесь ''Maybe'' --- это конструктор типов, в данном случае полиморфный, параметризованный произвольным типом ''a'', ''Nothing'' и ''Just'' --- конструкторы данных) (Напомним, здесь ''Maybe'' --- это конструктор типов, в данном случае полиморфный, параметризованный произвольным типом ''a'', ''Nothing'' и ''Just'' --- конструкторы данных)
Строка 1604: Строка 1604:
 </code> </code>
  
-Полиморфные типы похожи на контейнеры, которые могут содержать значения многих различных типов. Так, ''Maybe Int'' можно считать контейнером типа ''Maybe'', который содержит ''Int'' тэгом ''Just'' или ''Nothing''.+Полиморфные типы похожи на контейнеры, которые могут содержать значения многих различных типов. Так, ''Maybe Int'' можно считать контейнером типа ''Maybe'', который содержит ''Int'' с тэгом ''Just''или ''Nothing''.
  
 Теперь, предположим, что необходимо написать программу для обслуживания экспериментов по клонированию и скрещиванию овец. Нам потребуются функции ''mother'' и ''father''. Но если овцы клонированы, у них не всегда могут быть и отец, и мать! Теперь, предположим, что необходимо написать программу для обслуживания экспериментов по клонированию и скрещиванию овец. Нам потребуются функции ''mother'' и ''father''. Но если овцы клонированы, у них не всегда могут быть и отец, и мать!
Строка 2607: Строка 2607:
 то не распозналось.. Если элементы во входном списке еще остались, то переходим к шагу 1. то не распозналось.. Если элементы во входном списке еще остались, то переходим к шагу 1.
  
-Ниже применяем полученные функции для создания парсера parser.+Ниже применяем полученные функции для создания парсера ''parse''.
 <code haskell> <code haskell>
 parse teststr = if (mss == "S" parse teststr = if (mss == "S"