Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 10-operators.md #61

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions chapters/10-operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,36 @@ isEqualTo x y = x == y

Строго говоря, название «оператор» весьма условно, мы можем его и не использовать. Говорить о функции сложения столь же корректно, как и об операторе сложения.

## Пример для проверки работы в replit.com

```haslell
{-# LANGUAGE UnicodeSyntax #-} -- разрешение использовать не латинские имена переменных и функций (Unicod)
{-# LANGUAGE MultiWayIf #-} -- включение расширения которое позволяет использовать множественный if
module Main where -- подключение модулей используемых в программе
-- Обьявление функций используемых в программе
-- функция (оператор) сравнения
равно :: Int -> Int -> Bool
равно x y = x == y
--- функция корректировки времени
вычислитьВремя :: Int -> Int -- вычисление времени - возвращает Int
вычислитьВремя время =
let уставкаПоВремени = 40
сдвиг = 120
in
if | время < уставкаПоВремени -> время + сдвиг
| время `равно` уставкаПоВремени -> 1500 -- ипользуем функцию "равно" в качестве оператора `равно`
-- оптимизируем код заменив нижнюю строку
| otherwise ->
let дельта = 8 in время + дельта + сдвиг

-- Начало программы
main :: IO ()
-- т.к. функция вычислитьВремя возвращает Int, а putStrLn принимает только строку
-- то необходимо с помощью $ show (вычислитьВремя 100) - преобразовать Int в String
main = putStrLn $ show (вычислитьВремя 40)

```

## Зачем это нужно?

Почти все ASCII-символы (а также их всевозможные комбинации) можно использовать в качестве операторов в Haskell. Это даёт нам широкие возможности для реализации различных EDSL (англ. Embedded Domain Specific Language), своего рода &laquo;языков в языке&raquo;. Вот пример:
Expand Down