#оголошення — 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 #виклик #функції #функцій #префіксна #інфіксна #форми
-
CW: Функції та оператори в Haskell. Продовження.
Тепер перейдемо до створення власних функцій. Ми це вже робили у двох попередніх програмах. Там ми створювали функцію
mainяка не приймала жодних аргументів, але вони можуть приймати вхідні аргументи. Щоб створити функцію з аргументами потрібно перелічити їх до знаку=, таким чином розділяється оголошення віт тіла функції. Виглядає це такsumSquares x y = x ^ 2 + y ^ 2Викликати її потрібно так
sumSquares 5 3Назви функцій та її аргументів повинні починатись з літери у нижньому регістрі, або символ підкреслення. Після неї можна ставити літери у різних регістрах, символ підкреслення та одинарну лапку(
'). Лапку не можна ставити у назви ідентифікаторів в інших мовах.У Haskell можна створювати функції які спеціалізують інші функції. Для цього потрібно використати часткове застосування. Для прикладу візьмемо функцію
maxзі стандартної бібліотеки. Вона приймає два аргументи та повертає більший з них. Але іноді нам може знадобитись порівнювати різні числа з константою, наприклад нулем. У такому разі ми можемо створити функцію яка буде повертати нуль якщо передане її число більше нуля, і нуль якщо менше чи рівне.lowerLimit x = max 0 xАбо використати часткове застосування.
lowerLimit = max 0Виклик обидвох цих функцій не відрізняється.
lowerLimit 5#програмування #haskell #функції #оператори #чсткове #застосування #створення #оголошення
Я спочатку думав що буде невеликий допис, але довелось ділити на два коли дописав.
-
CW: Функції та оператори в Haskell. Продовження.
Тепер перейдемо до створення власних функцій. Ми це вже робили у двох попередніх програмах. Там ми створювали функцію
mainяка не приймала жодних аргументів, але вони можуть приймати вхідні аргументи. Щоб створити функцію з аргументами потрібно перелічити їх до знаку=, таким чином розділяється оголошення віт тіла функції. Виглядає це такsumSquares x y = x ^ 2 + y ^ 2Викликати її потрібно так
sumSquares 5 3Назви функцій та її аргументів повинні починатись з літери у нижньому регістрі, або символ підкреслення. Після неї можна ставити літери у різних регістрах, символ підкреслення та одинарну лапку(
'). Лапку не можна ставити у назви ідентифікаторів в інших мовах.У Haskell можна створювати функції які спеціалізують інші функції. Для цього потрібно використати часткове застосування. Для прикладу візьмемо функцію
maxзі стандартної бібліотеки. Вона приймає два аргументи та повертає більший з них. Але іноді нам може знадобитись порівнювати різні числа з константою, наприклад нулем. У такому разі ми можемо створити функцію яка буде повертати нуль якщо передане її число більше нуля, і нуль якщо менше чи рівне.lowerLimit x = max 0 xАбо використати часткове застосування.
lowerLimit = max 0Виклик обидвох цих функцій не відрізняється.
lowerLimit 5#програмування #haskell #функції #оператори #чсткове #застосування #створення #оголошення
Я спочатку думав що буде невеликий допис, але довелось ділити на два коли дописав.