Использование охранников после назначения некоторых переменных в первую очередь - PullRequest
4 голосов
/ 29 апреля 2011

Я знаю, что могу это сделать ...

isZero :: Int -> Bool
isZero x
  | x == 0      = True
  | otherwise   = False

Но могу ли я сделать что-то подобное?

isPalindrome :: Int -> Bool
isPalindrome x
  let digitList = intToDigits x -- Decomposes the integer into
                                -- digits, i.e. 37 -> [3, 7]
  | digitList == reverse digitList                = True
  | otherwise                                     = False

Это приведет к ошибкам компиляции, но я уверен, что вы знаете, что я пытаюсь сделать.

Ответы [ 2 ]

14 голосов
/ 29 апреля 2011

Используйте вместо where предложение

isPalindrome :: Int -> Bool
isPalindrome x
    | digitList == reverse digitList = True
    | otherwise                      = False
    where digitList = intToDigits x

Конечно, для этого примера мы могли бы просто пропустить охрану и написать

isPalindrome x = digitList == reverse digitList
    where digitList = intToDigits x
3 голосов
/ 29 апреля 2011

Почему бы не сделать

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