【发布时间】:2017-04-25 02:38:02
【问题描述】:
尝试运行以下代码时,输入“=”时出现解析错误
module GiveNums
where
import System.IO
main = do
hSetBuffering stdin LineBuffering
n <- giveNum
sum = map (+) n
putStrLn "The sum is " ++ show sum
giveNum = do
hSetBuffering stdin LineBuffering
putStrLn "Enter num"
num <- getLine
if read num == 0
then return []
else do
rest <- giveNum
return ((read num :: Int: rest)
【问题讨论】:
-
简而言之:因为这不是合法的 Haskell 语法。更长:绑定变量为
let var = expr。另外:map (+) n不会给出一个数字,而是一个函数列表,你可能想要折叠。另外:f x :: ty : xs无法正确解析,您需要(f x :: ty) : xs)等括号。 -
另外
sum已经被当作变量名,它是一个函数的名字。在 ghci 中执行:t sum和:i sum,或搜索它。我建议您暂时注释掉您的main函数并让您的giveNum函数正常工作。这真的很接近工作,尤其是托马斯的最后一个建议。然后,一旦giveNum工作,从main开始。 -
喜欢,非常接近。就像,离工作还有一个角色。
标签: haskell