使用保护符检查字符串的每个字符[Haskell]

问题描述 投票:0回答:2

我尝试使用Haskell时遇到问题。我想读一串数字并在看到字符时打印各种消息。

import System.Environment
import System.Exit
import Data.List
import Control.Monad


test_parse:: [Char] -> IO ()
test_parse [] = putStrLn "\n"
test_parse (a:b:c:xs)
            | a == '1' && b == '2' && c == '3' = putStrLn ("True")
            | a == '2' && b == '3' && c == '4' = putStrLn ("False")
            | a == '4' && b == '5' && c == '6' = putStrLn ("maybe")
            | otherwise = test_parse (b:c:xs)

main = do
    let numbers = "123456"
    let loop = do
            goGlenn <- getLine
            test_parse numbers
            putStrLn goGlenn
            when (goGlenn /= "start") loop
    loop
    putStrLn "ok"

问题是这个。我想打印“ True \ nFalse \ nMaybe \ n”,但我只打印“ True \ n”。我知道我的问题是,当警卫人员采取行动时,就会离开功能。但我看不到如何在不离开'test_parse的情况下检查整个字符串。

[如果有人有想法,谢谢。

我尝试使用Haskell时遇到问题。我想读一串数字并在看到字符时打印各种消息。导入System.Environment导入System.Exit导入Data.List ...

parsing haskell recursion guard
2个回答
3
投票

您想要检查每个后缀,而不管前缀上的结果如何。一个例子:


0
投票

为了说明chepner关于使classify返回String列表而不是进行I / O的观点,

© www.soinside.com 2019 - 2024. All rights reserved.