0
我試圖打印階乘函數的值,但它不起作用。如何在haskell中打印函數
fac n = if n < 2 then 1 else n * fac (n-1)
main = do
putStrLn "Enter a number: "
number <- getLine
print $ number >>= fac
我試圖打印階乘函數的值,但它不起作用。如何在haskell中打印函數
fac n = if n < 2 then 1 else n * fac (n-1)
main = do
putStrLn "Enter a number: "
number <- getLine
print $ number >>= fac
我不認爲你需要(>> =)那裏。只是
print $ fac number
應該是足夠的。但是,number
需要是Int
或Integer
。所以你要麼需要使用read
,要麼簡單得多,而不是使用getLine
,使用readLn
,這會做getLine
並自動將其轉換爲Integral類型。
如果readLn失敗,它將拋出一個IO異常。您可以手動捕獲它,或者使用'Alternative IO'實例:'fix $ \ try_again - > readLn <|>(putStrLn「請再試一次。」*> try_again)'。或者,您可以使用'Text.Read'中的'readMaybe':'numberMaybe < - readMaybe;案例編號可能是{Nothing - >處理錯誤;只是n - > ....}'。嘗試,直到你成功,'修復$ \ try_again - >也許(putStrLn「請再試。」*> try_again)純。 readMaybe =「getLine」。 – dfeuer