重复附加到字符串haskell
嗨,我是哈斯凯尔的新手,不知道该怎么做。到目前为止,我有以下代码重复附加到字符串haskell,haskell,Haskell,嗨,我是哈斯凯尔的新手,不知道该怎么做。到目前为止,我有以下代码 ask :: String -> IO () ask prompt = do putStrLn prompt line <- getLine if line == "" then ask "please try again" else putStrLn ("you said: " ++ reverse line) main :: IO () main = do ask "ple
ask :: String -> IO ()
ask prompt =
do
putStrLn prompt
line <- getLine
if line == ""
then ask "please try again"
else putStrLn ("you said: " ++ reverse line)
main :: IO ()
main =
do
ask "please say something"
ask::String->IO()
询问提示=
做
putStrLn提示符
line您可以在方法中添加计数器,如:
ask :: String -> IO ()
ask = ask' 1
ask' :: Int -> String -> IO ()
ask' n prompt = do
putStrLn prompt
line <- getLine
if null line
then ask' (n+1) ("please try again" ++ replicate n '!')
else putStrLn ("you said: " ++ reverse line)
ask::String->IO()
ask=ask'1
询问'::Int->String->IO()
ask'n prompt=do
putStrLn提示符
行而不是将一个提示传递给询问
,而是以由迭代
生成的无限列表的形式传递所有提示:
ask :: [String] -> IO ()
ask (p:ps) =
do
putStrLn p
line <- getLine
if line == ""
then ask ps
else putStrLn ("you said: " ++ reverse line)
main :: IO ()
main =
do
ask ("please say something" : iterate (++"!") "please try again")
ask::[String]->IO()
提问(p:ps)=
做
putStrLn p
行只是为了用另一种方法做出贡献
你想做两件事
- 一种是反向打印给定的字符串
- 另一种是处理错误,每次打印一条新的错误消息
让我们定义这两个动作:
-- This prints the given line backwards
putReverse :: String -> IO ()
putReverse line = putStrLn $ "you said: " ++ reverse line
-- Given an error message an a IO action, prints the message an execute the IO
askAgain :: String -> IO () -> IO ()
askAgain errorMessage io = putStrLn errorMessage >> io
ask
功能接收所需的错误消息作为输入。它请求一条线并处理每个案例。调用askAgain
时,io操作与ask
功能相同,但有新的错误信息
ask :: String -> IO ()
ask errorMessage = do
line <- getLine
if line == ""
then askAgain errorMessage $ ask (errorMessage ++ "!") -- here is where you update the error message
else putReverse line
main :: IO ()
main = do
putStrLn "please say something" -- optionally this prompt can but an argument for ask function. Try to refactor as an exercise!!
ask "please try again"
ask::String->IO()
ask errorMessage=do
线