所以我在考試中遇到了這個問題,我真的不知道如何匹配資料型別。
我需要讓控制臺向您詢問一個數字(必須大于 0),直到您說 0 為止,它一直在詢問,當您說 0 時,它必須停止并告訴您您說的最低數字,例如:
Give me a number (0 to finish): 4
Give me a number (0 to finish): 8
Give me a number (0 to finish): 9
Give me a number (0 to finish): 2
Give me a number (0 to finish): 0
The minimum value you said is: 2
我知道這可能很簡單,但我真的沒有讓它在帶有型別的單個函式中完成 :: IO()
這是我到目前為止所做的代碼:
minPos:: IO ()
minPos = do
putStrLn ("Give me a number (0 to finish): ")
a <- getLine
minPos' (read a)
minPos' :: [Char] -> IO ()
minPos' a = if (read a) == 0 && (read a) > 0 then
--This should print the lowest number given
do putStrLn "The minimum value you said is: "
else
do
putStrLn ("Give me a number (0 to finish): ")
b <- getLine
minPos' (minPos'' a (read b))
minPos'':: [Char] -> [Char] -> [Char]
minPos'' a b = if (b < a && (read b) > 0) then
minPos' (read b)
else minPos' (read a)
uj5u.com熱心網友回復:
你已經申請read a了minPos,所以minPos'應該拿一個Int,然后簽名Int -> IO ()。出于同樣的原因minPos''沒有多大意義。
你可以定義一個函式:
readValue :: IO Int
readValue = do
putStrLn ("Give me a number (0 to finish): ")
readLn
minPos:: IO ()
minPos = do
a <- readValue
case a of
0 -> putStrLn "No values entered"
n -> minPos' a
minPos' :: Int -> IO ()
minPos' mn = do
a <- readValue
case a of
…
這里的mn引數minPos'是迄今為止獲得的最小值。如果a是這樣0,您需要列印該數字。如果它讀取另一個專案,它應該取兩者中的最小值,例如 withmin :: Ord a => a -> a -> a并使用該最小值進行遞回呼叫。我把填寫這…部分作為練習。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387007.html
上一篇:有人可以解釋這個函式以及如何在Haskell中輸入它(中綴,:-:)
下一篇:函式的通用運算子
