За допомоги зіставлення ми можемо розділити виконання на кілька гілок залежно від умови, але ця умова може тільки перевіряти на рівність. Коли нам потрібно використати складнішу умову на допомогу приходять охоронні вирази.

Оголошуються ці вирази після аргументів відділяючись вертикальною лінією.

f x | x > 0 = x

Цю функцію можна викликати тільки на додатних числах.

Також ми можемо обʼєднати зіставлення й охоронні вирази.

f 0 = 0 f x | x > 0 = 2 / x

Якщо нам потрібно виконувати різні дії залежно від різних умов ми можемо оголошувати кілька різних функцій.

f x | x > 0 = x * 2 f x | x < 0 = x * (-2)

Якщо спробуємо викликати цю функцію на значенні 0, то отримаємо помилку.

*** Exception: Demo.hs:(18,1)-(19,22): Non-exhaustive patterns in function f

У попередньому дописі я писав що можна оголошувати тільки одну функцію з константою, а не зіставленням, але як ви вже могли замітити, то з охоронними виразами це обмеження зникає.

У такому оголошенні є мінус, а саме те що ми повторюємо назву функції та її аргументи, тому ми можемо спростити це оголошення ось так.

f 0 = 0 f x | x > 0 = x * 2 | x < 0 = x * (-2)

Це абсолютно рівні оголошення, тільки тут ми ще додали зіставлення для нуля.

#ukrhaskell #програмування #haskell #охоронні_вирази #зіставлення #умови #функції

Social.Net.Ua