Unknown - haskell-notes

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

[5,6,5,5,6,4,6,4,4,4]

Prelude System.Random>fmap (take 10 .randomRs (1, 6)) getStdGen

[5,6,5,5,6,4,6,4,4,4]

Обратите внимание на то, что функция getStdGen не обновляет генератор случайных чисел. Мы запра-

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

Генератор будет обновляться, если воспользоваться функцией newStdGen:

Prelude System.Random>fmap (take 10 .randomRs (1, 6)) newStdGen

[1,1,5,6,5,2,5,5,5,3]

Prelude System.Random>fmap (take 10 .randomRs (1, 6)) newStdGen

[5,4,6,5,5,5,1,5,5,2]

Создадим случайные слова из пяти букв:

Prelude System.Random>fmap (take 5 .randomRs (’a’, ’z’)) newStdGen

”maclg”

Prelude System.Random>fmap (take 5 .randomRs (’a’, ’z’)) newStdGen

”nfjoa”

Цитатник

Напишем небольшую программу, которая будет выводить на экран в случайном порядке цитаты. Цитаты

хранятся в виде списка пар ( автор, высказывание). Сначала мы генерируем случайное число в диапазоне

длины списка, затем выбираем цитату под этим номером и выводим её на экран.

module Main where

import Control.Applicative

import System.Random

main =

format .(quotes !!) <$>randomRIO (0, length quotes -1)

>>=putStrLn

format (a, b) =b

++space ++a ++space

wherespace =”\n\n”

quotes =[

(”Бьёрн Страуструп”,

”Есть лишь два вида языков программирования: те, \

\ на которые вечно жалуются, и те, которые никогда \

\ не используются.”),

(”Мохатма Ганди”, ”Ты должен быть теми изменениями, которые\

\ ты хочешь видеть вокруг.”),

(”Сократ”, ”Я знаю лишь то, что ничего не знаю.”),

(”Китайская народная мудрость”, ”Сохранив спокойствие в минуту\

\ гнева, вы можете избежать сотни дней сожалений”),

(”Жан Батист Мольер”, ”Медленно растущие деревья приносят лучшие плоды”),

(”Антуан де Сент-Экзюпери”, ”Жить это значит медленно рождаться”),

(”Альберт Эйнштейн”, ”Фантазия важнее знания.”),

(”Тони Хоар”, ”Внутри любой большой программы всегда есть\

\ маленькая, что рвётся на свободу”),

(”Пифагор”, ”Не гоняйся за счастьем, оно всегда находится в тебе самом”),

(”Лао Цзы”, ”Путешествие в тысячу ли начинается с одного шага”)]

Функция format приводит цитату к виду приятному для чтения. Попробуем программу в интерпретаторе:

Prelude> :!ghc --make Quote -o hi

[1 of1] Compiling Main

( Quote.hs, Quote.o )

Linkinghi ...

Prelude> :! ./hi

Путешествие в тысячу ли начинается с одного шага

Лао Цзы

Типичные задачи IO | 135

Prelude> :! ./hi

Не гоняйся за счастьем, оно всегда находится в тебе самом

Пифагор

Исключения

Мы уже знаем несколько типов, с помощью которых функции могут сказать, что что-то случилось не

так. Это типы Maybeи Either. Если функции не удалось вычислить значение она возвращает специальное

значение Nothingили Leftreason, по которому следующая функция может опознать ошибку и предпринять

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

как обрабатываются ошибки, которые происходят при взаимодействии с внешним миром, ошибки, которые

происходят внутри типа IO.

Ошибки функций с побочными эффектами обрабатываются с помощью специальной функции catch, она

определена в Prelude:

catch :: IOa ->( IOError -> IOa) -> IOa

Эта функция принимает значение, которое содержит побочные эффекты и функцию, которая обрабаты-

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

нас нет доступа, произойдёт ошибка. Мы можем не дать программе упасть и обработать ошибку с помощью

функции catch.

Например программа, в которой мы дописывали данные в файл, упадёт, если мы передадим не существу-

ющий файл. Но мы можем исправить это поведение с помощью функции catch. Мы можем перезапускать

программу, если произошла ошибка:

module FileSafe where

import Control.Applicative

import Control.Monad

main =try ‘catch‘ const main

try =msg1 >>getLine >>=read >>=append

whereread

file =readFile file >>=putStrLn >>return file

append file =msg2 >>getLine >>=appendFile file

msg1

=putStr ”input file: ”

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

Интервал:

Закладка:

Сделать

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

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


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

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

x