Unknown - haskell-notes

Здесь есть возможность читать онлайн «Unknown - haskell-notes» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Старинная литература, на английском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

haskell-notes: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «haskell-notes»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

haskell-notes — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «haskell-notes», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Закодируем два примера из первого раздела. В первом мы читаем один символ и печатаем его дважды:

Prelude> :m Control.Applicative

Prelude Control.Applicative> letres =(\c ->c :c :[]) <$>getChar >>=print

Prelude Control.Applicative>res

q”qq”

Мы сначала вызываем функцию getChar удваиваем результат функцией \c ->c :c :[]и затем выводим

на экран.

Во втором примере мы дважды запрашиваем символ с клавиатуры а затем печатаем их:

Prelude Control.Applicative> letres =liftA2 (\a b ->a :b :[]) getChar getChar >>=print

Prelude Control.Applicative>res

qw”qw”

8.3 Как пишутся программы

Мы уже умеем читать с клавиатуры и выводить значения на экран. Давайте научимся писать самостоя-

тельные программы. Программа обозначается специальным именем:

main :: IO()

Если модуль называется Mainили в нём нет директивы module ... whereи в модуле есть функция main

:: IO(), то после компиляции будет сделан исполняемый файл. Его можно запускать независимо от ghci.

Просто нажимаем дважды мышкой или вызываем из командной строки.

Напишем программу Helloworld. Единственное, что она делает это выводит на экран приветствие:

main :: IO()

main =print ”Hello World!”

Теперь сохраним эти строчки в файле Hello.hs, перейдём в директорию файла и скомпилируем файл:

ghc --make Hello

Появились объектный и интерфейсный файлы, а также появился третий бинарный файл. Это либо Hello

без расширения (в Linux) или Hello.exe (в Windows). Запустим этот файл:

$ ./Hello

”Hello World!”

Получилось! Это наша первая программа. Теперь напишем программу, которая принимает три символа

с клавиатуры и выводит их в обратном порядке:

import Control.Applicative

f :: Char -> Char -> Char -> String

f a b c =reverse $[a,b,c]

main :: IO()

main =print =<<f <$>getChar <*>getChar <*>getChar

Сохраним в файле ReverseIO.hs и скомпилируем:

ghc --make ReverseIO -o rev3

Дополнительным флагом -o мы попросили компилятор чтобы он сохранил исполняемый файл под име-

нем rev3. Теперь запустим в командной строке:

$ ./rev3

qwe

”ewq”

Как пишутся программы | 129

Набираем три символа и нажимаем ввод. И программа переворачивает ответ. Обратите внимание на то,

что с помощью print мы выводим не просто строку на экран, а строку как значение. Поэтому добавляются

двойные кавычки. Для того чтобы выводить строку существует функция putStr. Заменим print на putStr,

перекомпилируем и посмотрим что получится:

$ ghc --make ReverseIOstr -o rev3str

[1 of 1] Compiling Main

( ReverseIOstr.hs, ReverseIOstr.o )

Linking rev3str ...

$ ./rev3str

123

321$

Видно, что после вывода не произошёл перенос каретки, терминал приглашает нас к вводу команды сразу

за ответом, если перенос нужен, можно воспользоваться функцией putStrLn. Обратите внимание на то, что

кроме бинарного файла появились ещё два файла с расширениями .hi и .o. Первый файл называется ин-

терфейсным он описывает какие в модуле определения, а второй файл называется объектным. Он содержит

скомпилированный код модуля.

Стоит отметить команду runhaskell. Она запускает программу без создания дополнительных файлов.

Но в этом случае выполнение программы будет происходить медленнее.

8.4 Типичные задачи IO

Вывод на экран

Нам уже встретилось несколько функций вывода на экран. Это функции: print (вывод значения из эк-

земпляра класса Show), putStr (вывод строки) и putStrLn (вывод строки с переносом). Каждый раз когда мы

набираем какое-нибудь выражение в строке интерпретатора и нажимаем Enter, интерпретатор применяет к

выражению функцию print и мы видим его на экране.

Из простейших функций вывода на экран осталось не рассмотренной лишь функция putChar, но я думаю

вы без труда догадаетесь по типу и имени чем она занимается:

putChar :: Char -> IO()

Функции вывода на экран также можно вызывать в интерпретаторе:

Prelude>putStr ”Hello” >>putChar ’ ’ >>putStrLn ”World!”

Hello World!

Обратите внимание на применение постоянной функции для монад >>. В этом выражении нас интересует

не результат, а те побочные эффекты, которые выполняются при композиции специальных функций. Также

мы пользовались функцией >>в сочетании с монадой Writerдля накопления результата.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «haskell-notes»

Представляем Вашему вниманию похожие книги на «haskell-notes» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «haskell-notes»

Обсуждение, отзывы о книге «haskell-notes» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x