как написать вернуть Хаскель - PullRequest
5 голосов
/ 28 июня 2010

Я хочу, чтобы моя функция showStackHead брала стек, печатала голову и возвращала остатки, вот мой код - code

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

, когда я запускаю этот код, компилятор сообщает мне, что есть ошибка синтаксического анализао втором возврате, так как правильно написать эту функцию?

Ответы [ 2 ]

15 голосов
/ 28 июня 2010

Отступ «возврата» на ту же глубину, что и «putStrLn», примерно так:

showStackHead xs
   | xs == []   = return []
   | otherwise  = do putStrLn ("result:" ++ (head xs))
                     return (tail xs)
2 голосов
/ 28 июня 2010

Кроме того, ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...