#форми — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #форми, aggregated by home.social.
-
CW: Створення операторів і стандартні оператори :haskell:.
У
Haskellможна оголошувати свої оператори. Вони можуть складатись з одного або кількох символів. Дозволяються наступні символи~!?.@#$%^&*-<=>+\|/. Також можна використовувати символ:, але він повинен розташовуватись у середині або кінці, не на початку.Оголошуються оператори в синтаксисі схожому на виклик
x *+* y = x^2 + y^2або можна використати префіксну форму
(*+*) x y = x^2 + y^2Примітка: Функції можна оголошувати в інфіксній формі.
ЗВЕРНІТЬ УВАГУ!: Усі оператори є бінарні окрім унарного мінуса який обовʼязково обгортають в круглі дужки.
Усі оператори мають пріоритети для правильної роботи, саме за їхньої допомоги вираз
2 + 2 * 2вичислюється правильно й результат дорівнюватиме6, а не8. Є десять рівнів пріоритету від нуля до девʼяти.Але що робити з кількома операторами якщо у них один пріоритет, це може бути кілька викликів одного оператора. Тут потрібно використати асоціативність. Є два види асоціативності ліва і права. Ліва асоціативність це коли оператори застосовуються по черзі зліва на право, а права навпаки.
(2 + 1) - 5 -- ліва 2 + (1 - 5) -- праваОголошується асоціативність оператора за допомоги ключових слів:
infixl- ліваinfixr- праваinfix- відсутня
Якщо асоціативність відсутня, то такий оператор не можна викликати кілька раз або з іншими операторами того ж пріоритету в одному виразі.
Вказується асоціація і пріоритет у такому синтаксисі
infix[rl] <prio> <operator>. Вказується це, або до, або після оголошення самого оператора, але в інтерпретаторі це мусе бути одним рядком, тому їх потрібно розділити крапкою з комою.infixl 7 +** a +** b = a^2 + b^2Якщо цього не вказати, то оператор матиме ліву асоціативність і девʼятий, найвищий, пріоритет.
Дізнатись цю інформацію про оператор можна за допомоги команди інтерпретатора
info.ghci> infixl 7 +**; (+**) a b = a^2 + b^2 ghci> 5 +** 4 41 ghci> :i (+**) (+**) :: Num a => a -> a -> a -- Defined at <interactive>:1:15 infixl 7 +**Якщо явно не вказати
infix, то й у виводі цієї команди не буде такої інформації.У
Haskellнемає вбудованих операторів. Всі стандартні оператори оголошені в стандартній бібліотеці. Є такі стандартні оператори.infixr 8 ^, `` infixl 7 *, /, `div`, `mod` infixl 6 +, - infix 4 ==, /=, <, <=, >=, >Це не всі, але інші ми розглянемо пізніше. Оператор
``це оператор виклику функції в інфіксному форматі. Виклик функції у префіксному вигляді має праву асоціативність і девʼятий пріоритет./=це оператор не рівності, в інших мовах зазвичай він виглядає!=. Оператори порівняння не мають асоціативності, тому їх не можна обʼєднувати в ланцюжок.#програмування #haskell #hs #оператори #створення #оголошення #асоціативність #пріоритети #стандартні #стандартна #бібліотека #інтерпретатор #ghci #infix #infixl #infixr #виклик #функції #функцій #префіксна #інфіксна #форми
-
CW: Створення операторів і стандартні оператори :haskell:.
У
Haskellможна оголошувати свої оператори. Вони можуть складатись з одного або кількох символів. Дозволяються наступні символи~!?.@#$%^&*-<=>+\|/. Також можна використовувати символ:, але він повинен розташовуватись у середині або кінці, не на початку.Оголошуються оператори в синтаксисі схожому на виклик
x *+* y = x^2 + y^2або можна використати префіксну форму
(*+*) x y = x^2 + y^2Примітка: Функції можна оголошувати в інфіксній формі.
ЗВЕРНІТЬ УВАГУ!: Усі оператори є бінарні окрім унарного мінуса який обовʼязково обгортають в круглі дужки.
Усі оператори мають пріоритети для правильної роботи, саме за їхньої допомоги вираз
2 + 2 * 2вичислюється правильно й результат дорівнюватиме6, а не8. Є десять рівнів пріоритету від нуля до девʼяти.Але що робити з кількома операторами якщо у них один пріоритет, це може бути кілька викликів одного оператора. Тут потрібно використати асоціативність. Є два види асоціативності ліва і права. Ліва асоціативність це коли оператори застосовуються по черзі зліва на право, а права навпаки.
(2 + 1) - 5 -- ліва 2 + (1 - 5) -- праваОголошується асоціативність оператора за допомоги ключових слів:
infixl- ліваinfixr- праваinfix- відсутня
Якщо асоціативність відсутня, то такий оператор не можна викликати кілька раз або з іншими операторами того ж пріоритету в одному виразі.
Вказується асоціація і пріоритет у такому синтаксисі
infix[rl] <prio> <operator>. Вказується це, або до, або після оголошення самого оператора, але в інтерпретаторі це мусе бути одним рядком, тому їх потрібно розділити крапкою з комою.infixl 7 +** a +** b = a^2 + b^2Якщо цього не вказати, то оператор матиме ліву асоціативність і девʼятий, найвищий, пріоритет.
Дізнатись цю інформацію про оператор можна за допомоги команди інтерпретатора
info.ghci> infixl 7 +**; (+**) a b = a^2 + b^2 ghci> 5 +** 4 41 ghci> :i (+**) (+**) :: Num a => a -> a -> a -- Defined at <interactive>:1:15 infixl 7 +**Якщо явно не вказати
infix, то й у виводі цієї команди не буде такої інформації.У
Haskellнемає вбудованих операторів. Всі стандартні оператори оголошені в стандартній бібліотеці. Є такі стандартні оператори.infixr 8 ^, `` infixl 7 *, /, `div`, `mod` infixl 6 +, - infix 4 ==, /=, <, <=, >=, >Це не всі, але інші ми розглянемо пізніше. Оператор
``це оператор виклику функції в інфіксному форматі. Виклик функції у префіксному вигляді має праву асоціативність і девʼятий пріоритет./=це оператор не рівності, в інших мовах зазвичай він виглядає!=. Оператори порівняння не мають асоціативності, тому їх не можна обʼєднувати в ланцюжок.#програмування #haskell #hs #оператори #створення #оголошення #асоціативність #пріоритети #стандартні #стандартна #бібліотека #інтерпретатор #ghci #infix #infixl #infixr #виклик #функції #функцій #префіксна #інфіксна #форми