Кто-то может предоставить мне легкое для понимания объяснения защищенного уравнения, поскольку оно используется в Haskell и также его математическом смысле?
Хаскелл-охранники можно рассматривать как математическую функцию, определенную кусочком над входом.
foo x | x < 0 = bar
| x < 5 = baz
| x < 20 = quux
| otherwise = quaffle
было бы написано математиком примерно так:
foo(x) = { bar, if x < 0
baz, if x >= 0 && x < 5
quux, if x >= 5 && x < 20
quaffle, if x >= 20
Каждый из охранников в функции Хаскелла неявно несет отрицание всех охранников, которые ему предшествуют, потому что их пытаются один за другим.
Хаскелл предпочитает написать стража слева от знака равенства, чтобы было легче следить за потоком управления. Если вы решите прочитать | как "такой", то это станет довольно интуитивным.
Защищенное уравнение - это уравнение (утверждение о равенстве), который включает в себя то, что называется разграничением падежей . Пример:
fac :: Integer -> Integer
fac n | n > 0 = n * fac (n - 1)
| otherwise = 1
Это определение факториальной функции . Математики напишут:
0! = 1 по определению.Для всех значений n больше, чем 0 , n! можно определить в терминах (n - 1)! . Это не относится к 0! . По этой причине необходимо различать два случая. И это то, что делает осторожное уравнение.