Haskell впустил / где и если отступ - PullRequest
0 голосов
/ 01 июля 2011

У меня есть функция:

isSimpleNumber :: Int -> Bool
isSimpleNumber x = let deriveList = map (\y -> (x `mod` y)) [1 .. x]
                       filterLength = length ( filter (\z -> z == 0) deriveList
                       ....

После filterLength я хочу проверить, сколько filterLength, я пытаюсь:

isSimpleNumber :: Int -> Bool
isSimpleNumber x = let deriveList = map (\y -> (x `mod` y)) [1 .. x]
                       filterLength = length ( filter (\z -> z == 0) deriveList
                       in if filterLength == 2
                          then true

Я получаю ошибку:

    parse error (possibly incorrect indentation)
Failed, modules loaded: none.

Как правильно поставить отступы, если и в?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Это скомпилирует:

isSimpleNumber :: Int -> Bool
isSimpleNumber x = let deriveList = map (\y -> (x `mod` y)) [1 .. x]
                       filterLength = length ( filter (\z -> z == 0) deriveList )
                   in filterLength == 2

main = print $ isSimpleNumber 5

Отсутствует закрывающее ")" после "diverveList". Вам также не нужно выражение if-then-true.

3 голосов
/ 01 июля 2011

Для if всегда требуется ветвь then и else, поэтому вам, вероятно, потребуется if filterLength == 2 then true else false, что эквивалентно filterLength == 2.

...