2011-07-01 26 views
0

我有一個函數:哈斯克爾讓/哪裏,如果壓痕

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. 

如何正確使用if和in來放置縮進?

謝謝。

回答

3

這將編譯:

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 

有缺少一個右 「)」 後, 「deriveList」。你也不需要if-then-true表達式。

3

if需求總是既thenelse分支,所以你可能需要if filterLength == 2 then true else false,這相當於filterLength == 2