#виклик — 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
Тепер прийшов час детальніше поговорити про функції й оператори. Мій "курс" розрахований на те що ви знаєте хоча б
Pythonкраще якщоC++, бо я найчастіше можу порівнювати саме з ним.На відміну від
Cподібних мов програмування у яких виклик функції відбувається у стиліf(x1,x2)деfце функція, аx1іx2це її аргументи. УHaskellсинтаксис виглядає такf x1 x2. Це ідентичні виклики, але з різною стилістикою. Якщо тут додати дужкиf (x1 x2), тодіx1вважатиметься ще одною функцією, якій передається один аргументx2і результат передасться функціїfяк єдиний аргумент. Тут дужки вважаються просто групуванням. Але все ще тут відсутня кома між аргументами, якщо її додатиf (x1, x2), то(x1, x2)буде кортежем і передаватиметься як один аргумент.Також у Haskell можна зробити так
(f x1) x2це буде те саме що й без дужок. Це називається часткове застосування функцій, тому виклик функції називається ліво-асоціативний. Знадобиться нам це трохи згодом.Тепер перейдемо до операторів. Вони викликаються в інфіксному стилі, на відміну від функцій, які викликаються у префіксному стилі. Виклик оператора виглядає та
2 + 2 * 2. Оператори мають пріоритети тому цей вираз, як і у математиці, дорівнюватиме6. Всі оператори є бінарними, окрім унарного мінуса, через це іноді доводиться обгортати відʼємні числа у додаткові дужки(-2) + 2, але у цьому випадку вони не обовʼязкові, натомість якщо поміняти їх місцями2 + -2тут виникне помилка, тому потрібно додати дужки2 + (-2).Оператори можна викликати у префіксному стилі, для цього потрібно перенести його на початок і обгорнути у дужки
(+) 2 4. У такому разі виклик виглядає як виклик функції. Але й функції можна викликати в операторному стилі для цього ми обгортаємо назву функції у зворотні лапкиx1 `f` x2.#програмування #haskell #функції #оператори #виклик #префіксний #інфіксний
Все не влазилось в один допис, тому продовження у відповіді на цей.
-
CW: Функції та оператори в Haskell
Тепер прийшов час детальніше поговорити про функції й оператори. Мій "курс" розрахований на те що ви знаєте хоча б
Pythonкраще якщоC++, бо я найчастіше можу порівнювати саме з ним.На відміну від
Cподібних мов програмування у яких виклик функції відбувається у стиліf(x1,x2)деfце функція, аx1іx2це її аргументи. УHaskellсинтаксис виглядає такf x1 x2. Це ідентичні виклики, але з різною стилістикою. Якщо тут додати дужкиf (x1 x2), тодіx1вважатиметься ще одною функцією, якій передається один аргументx2і результат передасться функціїfяк єдиний аргумент. Тут дужки вважаються просто групуванням. Але все ще тут відсутня кома між аргументами, якщо її додатиf (x1, x2), то(x1, x2)буде кортежем і передаватиметься як один аргумент.Також у Haskell можна зробити так
(f x1) x2це буде те саме що й без дужок. Це називається часткове застосування функцій, тому виклик функції називається ліво-асоціативний. Знадобиться нам це трохи згодом.Тепер перейдемо до операторів. Вони викликаються в інфіксному стилі, на відміну від функцій, які викликаються у префіксному стилі. Виклик оператора виглядає та
2 + 2 * 2. Оператори мають пріоритети тому цей вираз, як і у математиці, дорівнюватиме6. Всі оператори є бінарними, окрім унарного мінуса, через це іноді доводиться обгортати відʼємні числа у додаткові дужки(-2) + 2, але у цьому випадку вони не обовʼязкові, натомість якщо поміняти їх місцями2 + -2тут виникне помилка, тому потрібно додати дужки2 + (-2).Оператори можна викликати у префіксному стилі, для цього потрібно перенести його на початок і обгорнути у дужки
(+) 2 4. У такому разі виклик виглядає як виклик функції. Але й функції можна викликати в операторному стилі для цього ми обгортаємо назву функції у зворотні лапкиx1 `f` x2.#програмування #haskell #функції #оператори #виклик #префіксний #інфіксний
Все не влазилось в один допис, тому продовження у відповіді на цей.