Охраняемые уравнения в Хаскеле - PullRequest
10 голосов
/ 09 февраля 2010

Может ли кто-нибудь дать мне понятное объяснение охраняемого уравнения , которое используется в Haskell, а также его математический смысл?

Ответы [ 3 ]

10 голосов
/ 09 февраля 2010

Защитники Хаскелла можно рассматривать как математическую функцию, определенную кусочно над входом.

foo x | x < 0 = bar
      | x < 5 = baz
      | x < 20 = quux
      | otherwise = quaffle

будет записываться математиком как:Функция Haskell неявно несет отрицание всех охранников, которые ей предшествуют, потому что их пробуют один за другим.

Haskell решает написать охранника слева от знака равенства, чтобы было легче следоватьконтролировать поток.Если вы решили прочитать |как «такой, что», тогда он становится довольно интуитивным.

8 голосов
/ 09 февраля 2010

Охраняемое уравнение - это уравнение (утверждение о равенстве), которое включает в себя то, что называется разницей в случае . Пример:

fac :: Integer -> Integer
fac n | n > 0     = n * fac (n - 1)
      | otherwise = 1

Это определение факториальной функции . Математики написали бы,

Latex

0! = 1 , по определению. Для всех значений n больше 0 , n! может быть определено в терминах (n - 1)! . Это не относится к 0! . По этой причине необходимо различать два случая. И это то, что делает защищенное уравнение.

4 голосов
/ 09 февраля 2010

Защищенное уравнение - это эквивалентная конструкция Хаскелла кусочной функции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...