Изучай Haskell во имя добра! - [4]
>ghci и нажмите Enter. Если ваша система не найдёт программу GHCi, попробуйте перезагрузить компьютер.Если вы определили несколько функций в сценарии, скажем, myfunctions.hs, то их можно загрузить в GHCi, напечатав команду >: l myfunctions. Нужно только убедиться, что файл myfunctions.hs находится в том же каталоге, из которого вы запустили GHCi.
Если вы изменили hs-сценарий, введите в интерактивном режиме >:l myfunctions, чтобы загрузить его заново. Можно также перегрузить загруженный ранее сценарий с помощью команды >: r. Обычно я поступаю следующим образом: определяю несколько функций в hs-файле, загружаю его в GHCi, экспериментирую с функциями, изменяю файл, перезагружаю его и затем всё повторяю. Собственно, именно этим мы с вами и займёмся.
Благодарности
Благодарю всех, кто присылал мне свои замечания, предложения и слова поддержки. Также благодарю Кита, Сэма и Мэрилин, которые помогли мне отшлифовать мастерство писателя.
1
На старт, внимание, марш!
Отлично, давайте начнём! Если вы принципиально не читаете предисловий к книгам, в данном случае вам всё же придётся вернуться назад и заглянуть в заключительную часть введения: именно там рассказано, что вам потребуется для изучения данного руководства и для загрузки программ.
Первое, что мы сделаем, – запустим компилятор GHC в интерактивном режиме и вызовем несколько функций, чтобы «прочувствовать» язык Haskell – пока ещё в самых общих чертах. Откройте консоль и наберите >ghci. Вы увидите примерно такое приветствие:
>GHCi, version 7.0.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done.
>Loading package integer-gmp ... linking ... done.
>Loading package base ... linking ... done.
>Loading package ffi-1.0 ... linking ... done.
>Prelude>
Поздравляю – вы в GHCi!
ПРИМЕЧАНИЕ. Приглашение консоли ввода – >Prelude>, но поскольку оно может меняться в процессе работы, мы будем использовать просто >ghci>. Если вы захотите, чтобы у вас было такое же приглашение, выполните команду >:set prompt "ghci> ".
Немного школьной арифметики:
>ghci> 2 + 15 17
>ghci> 49 * 100
>4900
>ghci> 1892 – 1472 420
>ghci> 5 / 2
>2.5
Код говорит сам за себя. Также в одной строке мы можем использовать несколько операторов; при этом работает обычный порядок вычислений. Можно использовать и круглые скобки для облегчения читаемости кода или для изменения порядка вычислений:
>ghci> (50 * 100) – 4999 1
>ghci> 50 * 100 – 4999
>1
>ghci> 50 * (100 – 4999)
>–244950
Здорово, правда? Чувствую, вы со мной не согласны, но немного терпения! Небольшая опасность кроется в использовании отрицательных чисел. Если нам захочется использовать отрицательные числа, то всегда лучше заключить их в скобки. Попытка выполнения >5 * –3 приведёт к ошибке, зато >5 * (–3) сработает как надо.
Булева алгебра в Haskell столь же проста. Как и во многих других языках программирования, в Haskell имеется два логических значения >True и >False, для конъюнкции используется операция >&& (логическое «И»), для дизъюнкции – операция >|| (логическое «ИЛИ»), для отрицания – операция >not.
>ghci> True && False False
>ghci> True && True True
>ghci> False || True True
>ghci> not False
>True
>ghci> not (True&&True)
>False
Можно проверить два значения на равенство и неравенство с помощью операций >== и >/=, например:
>ghci> 5 == 5
>True
>ghci> 1 == 0
>False
>ghci> 5 /= 5
>False
>ghci> 5 /= 4
>True
>ghci> "привет" == "привет"
>True
А что насчёт >5 + лама или >5 == True? Если мы попробуем выполнить первый фрагмент, то получим большое и страшное сообщение об ошибке[1]!
>No instance for (Num [Char])
>arising from a use of `+' at
>Possible fix: add an instance declaration for (Num [Char]) In the expression: 5 + "лама"
>In the definition of `it': it = 5 + "лама"
Та-ак! GHCi говорит нам, что >лама не является числом, и непонятно, как это прибавить к 5. Даже если вместо >лама подставить >четыре или >4, Haskell всё равно не будет считать это числом! Операция >+ ожидает, что аргументы слева и справа будут числовыми. Если же мы попытаемся посчитать >True == 5, GHCi опять скажет нам, что типы не совпадают.
Несмотря на то что операция >+ производится только в отношении элементов, воспринимаемых как число, операция сравнения (==), напротив, применима к любой паре элементов, которые можно сравнить. Фокус заключается в том, что они должны быть одного типа. Вы не сможете сравнивать яблоки и апельсины. В подробностях мы это обсудим чуть позже.
ПРИМЕЧАНИЕ. Запись >5 + 4.0 вполне допустима, потому что >5 может вести себя как целое число или как число с плавающей точкой. >4.0 не может выступать в роли целого числа, поэтому именно число >5 должно «подстроиться».
Вызов функций
Возможно, вы этого пока не осознали, но всё это время мы использовали функции. Например, операция >* – это функция, которая принимает два числа и перемножает их. Как вы видели, мы вызываем её, вставляя символ >* между числами. Это называется «инфиксной записью».
Обычно функции являются префиксными, поэтому в дальнейшем мы не будем явно указывать, что функция имеет префиксную форму – это будет подразумеваться. В большинстве императивных языков функции вызываются указанием имени функции, а затем её аргументов (как правило, разделённых запятыми) в скобках. В языке Haskell функции вызываются указанием имени функции и – через пробел – параметров, также разделённых пробелами. Для начала попробуем вызвать одну из самых скучных функций языка:
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. Стандарт С++11 языка С++ предоставляет развитую поддержку многопоточности в приложениях. Поэтому, чтобы сохранять конкурентоспособность, вы должны овладеть принципами и приемами их разработки, а также новыми средствами языка, относящимися к параллелизму.Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11.
Эта книга для тех, кто давно связан с разработкой программного обеспечения. Или для тех, кто еще думает выбрать программирование своей профессией. Или для тех, кто просто привык думать и размышлять о происходящем в мире информационных технологий.Не секрет, что основная масса софтостроения сосредоточена в секторе так называемой корпоративной разработки: от комплексных информационных систем предприятия до отдельных приложений. Поэтому немалая часть сюжетов касается именно Enterprise Programming.Из текста вы вряд ли узнаете, как правильно склеивать многоэтажные постройки из готовых компонентов в гетерогенной среде, проектировать интерфейсы, синхронизировать процессы или писать эффективные запросы к базам данных.
Вниманию читателей предлагается справочник по JavaScript.Справочник предназначается для людей, уже освоивших азы программирования в JavaScript.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.Дата выхода данной версии справочника: 12:33, 21 марта 2007.
Вниманию читателей предлагается справочник по PHP.Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.