Выражения

Теория

Одна из вещей, которые делает почти любая программа — это вычисление чисел Фибоначчи работа с числами. Вообще, именно для этой цели (а отнюдь не для моделирования сражения между террористами и контр-террористами) компьютеры и придумывались. По этой причине в Хаскелл есть операции сложения (обозначается знаком +), умножения (обозначается звездочкой *), вычитания (-) и деления (обознчается косой чертой (слешем) /, не перепутай его с обратным слешем «\»). Также для определения порядка выполнения операций можно использовать скобки (как в обычной математике). Давай посмотрим на программу, считающей простой пример (можешь посчитать его в уме?):

main = putStrLn show (2 + 10 * 5 / 2)

Если запустить эту программу, мы получим 27 (проверить).

Хаски 1

Тут ты также можешь заметить новую функцию show. Она преобразует значение в строку. Дело в том, что функция putStrLn умеет выводить только строки, а 27 — это число (строкой оно бы было, если бы было заключено в кавычки: "27", а так это число. Для компьютера 27 и "27" — это совсем разные вещи). Потому мы вычисляем результат примера, с помощью show превращаем его в строку и отдаем эту строку фукнции putStrLn, которая ее выводит.

Скобки в этой программе говорят, что мы сначала должны посчитать выражение, а только потом передать получившееся число 27 функции show. Давай по шагам посмотрим, как это работает. После вычисления выражения в скобках получается 27 и мы можем записать код в таком виде:

main = putStrLn show (27)

Затем функция show (27) преобразует число в строку:

main = putStrLn "27"

Ну а дальше эта строка выводится нам на экран. Если бы мы убрали скобки:

main = putStrLn show 2 + 10 * 5 / 2

То функция show преобразовала в строку только число 2 и получилось бы:

main = putStrLn "2" + 25

Ну а сложить строку и число нельзя.

Хаски 2

Вывод текста и чисел вместе

Строки можно склеивать с помощью операции ++. За счет этого мы можем добавить поясняющий текст к тому, что пишет программа. Вот пример:

main = putStrLn ("500 мешков по 16 кг в сумме весят " ++ show (500 * 16) ++ " кг")

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

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

main = putStrLn ("200 долларов - это не только ценный мех, но и " ++ show (200 * 31.56) ++ " рублей")

Хаски 3

Функции

Давай напишем программу по переводу долларов в рубли. Мы пишем число долларов, курс и она пишет нам, какой сумме в рублях они соответствуют. Чтобы код был более читаемым и красивым, разобьем его на несколько функций. Функция, как ты, надеюсь, помнишь — это кусочек кода, который что-то делает и что-то возвращает в результате. Простейший пример — функция, которая всегда возвращает одно и то же число. Напишем функцию, возвращающую нам курс доллара к рублю (заметь, дробные числа пишутся в программировании через точку, а не через запятую):

exchangeRate = 32.13

Этой строчкой мы определили функцию exchangeRate . Теперь если мы где-то напишем это имя (exchangeRate), то вызовется функция и будет подставлено число 32.13. Напишем еще одну функцию, считающую сколько у нас долларов:

dollars = 200

А теперь напишем функцию, которая получает на вход число долларов и возвращает число рублей:

convertToRubles x = x * exchangeRate

У этой функции есть так называемый аргумент x. Если мы где-то напишем, например, convertToRubles 200, то вызовется функция, а вместо x будет передано число 200. Это число дальше умножается на курс и резуьтат возвращается. Имея все эти функции, мы можем теперь легко написать программу, которая поможет нам перевести наши деньги в другую валюту.

Чтобы не расслабляться, давай сразу же решим еще одну несложную задачу:

Родители пообещали Васе, что на каждый 100-й день в году (то есть на 100, 200 и 300) он получит от них подарок. Напиши программу, которая по номеру месяца и дня (например, «6 июня») выводит, сколько дней осталось ждать подарка.

А что дальше?

Cirno is watching

Упс, а предполагалось, что что-то будет дальше?

Если тебя заинтересовал язык Haskell, то вот, что ты можешь почитать для дальнейшего развития:

Если ты не знаешь английский

Если ты знаешь английский

-----

Куда вводить код? Что надо скачать? Читай первый урок.

Есть вопросы? Задай гуглу или автору.

Нравится урок? Лайкай, репости, приглашай друзей, пости котов и Канако, шли добра, решай задачи, помогай новичкам! Кнопок для лайка нет, кто хочет зарепостить, всегда может сделать это ручками.

Как связаться с автором? Я хочу переодеть его в платье школьницы и жениться на нем. Ящик codedokode (кот) gmail.com ждет ваших писем. А вконтактик и фейсбучек ждут ваших лайков. Но ответ на банальные вопросы лучше искать в Гугле или на stackoverflow.

Я решил задачку!!! Молодец, делай следующий урок

Почему так много рекламы? Всю рекламу на сайте ставит юкоз (бесплатный хостинг же), а не я.

На сайте установлена система Google Analytics (и еще несколько аналогичных систем от юкоза). Данные о твоем IP-адресе, посещаемых страницах, времени посещения отправляются в Google Corporation, США. Хочу знать, кто и зачем сюда заходит. Поверь, другие сайты делают точно так же. Все сайты пишут логи.