【问题标题】:how to write return Haskell如何编写返回 Haskell
【发布时间】:2010-06-28 05:07:22
【问题描述】:

我希望我的 showStackHead 函数获取堆栈打印头部并返回其余部分,这是我的代码 --代码

showStackHead xx
               | xx == []   = return []
               | otherwise  = do putStrLn("result:" ++ (head xx))
                              return (tail xx)

当我运行这段代码时,编译器告诉我第二次返回有一个解析错误,那么编写这个函数的正确方法是什么?

【问题讨论】:

    标签: haskell syntax


    【解决方案1】:

    将“return”缩进到与“putStrLn”相同的深度,如下所示:

    showStackHead xs
       | xs == []   = return []
       | otherwise  = do putStrLn ("result:" ++ (head xs))
                         return (tail xs)
    

    【讨论】:

      【解决方案2】:

      顺便说一句,您的 showStackHead 可以通过使用模式匹配更清晰。让你放弃守卫比较,头尾:

      #! /usr/bin/env runhaskell
      
      
      showStackHead []     = return []
      showStackHead (x:xs) = do
         putStrLn $ "result: " ++ [x]
         return xs
      
      
      main :: IO ()
      main = do
         let s1 = []
         r1 <- showStackHead s1
         putStrLn $ "returned: " ++ r1
      
         putStrLn "---"
      
         let s2 = "foo"
         r2 <- showStackHead s2
         putStrLn $ "returned: " ++ r2
      
         putStrLn "---"
      
         let s3 = "q"
         r3 <- showStackHead s3
         putStrLn $ "returned: " ++ r3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-23
        • 2011-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多