【问题标题】:paper, rock, and scissors in HaskellHaskell 中的纸、石头和剪刀
【发布时间】:2013-04-06 14:59:34
【问题描述】:

下面的代码被编程来决定 Haskell 中剪刀石头布的结果,但是终端给出错误

data Move = Paper | Rock | Scissors  
 deriving (Eq, Show)
data Result = Win | Draw | Loose 
  deriving (Eq, Show)


beats :: Move -> Move
beats move = case move of 
  Paper -> Scissors
  Rock  -> Paper
  Scissors -> Rock

score :: Move -> Move -> Result
score this_move opposing_move
  | this_move == beats opposing_move = Win
  | this_move == opposing_move       = Draw
  | otherwise = Loose

这是来自终端的错误信息

[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:1:60: parse error on input `data'
Failed, modules loaded: none.

谁喜欢告诉我它有什么问题?谢谢XD

【问题讨论】:

  • 这不是你的错误的原因,而是Win 的反义词拼写为Lose。 (“Loose”是不同单词的正确拼写)。
  • 正如您在此处编写的,您的代码可以正常工作。您使用的是什么操作系统、文本编辑器和 ghc 版本?另外,您能找到一种方法来共享您要编译的确切文件吗?当您在此处复制代码时,它的格式化方式可能存在一些微妙的错误,而这些错误并未保留。进一步的证据是,当我复制您的代码时,第一行没有 60 个字符,但错误消息说问题出在第一行的第 60 个字符。
  • 如果第一行没有 60 个字符并且错误消息报告相反,我了解文件格式中使用的行尾字符不是编译器所期望的。然后该文件肯定来自Windows系统,并且他没有被重新格式化以在Mac(类似Linux)操作系统上工作。这就是我的解释。
  • @zurgl 即使使用 Windows 的\r\n,也有一个\n,编译器对此很满意。在过去,Mac 只使用\r 进行行分隔,编译器可能会遇到问题。但我认为今天很难得到这样的文件。
  • @DanielFischer,好的,我不知道 ghc 可以管理这两种情况。感谢您的澄清。

标签: haskell parse-error


【解决方案1】:

您的代码格式正确,我可以将其加载到 ghci 中而无需任何修改。
解析错误取决于您的文本编辑器如何管理空格和制表符。
您应该更多地调查您的编辑器配置,而不是基本代码的正确性。


使用这段代码重新格式化您的文件。

$ cd /to/your/code.hs
$ ghci

然后写,

ghci >let f = readFile "code.hs"
ghci >do {reencoded <- fmap (filter (/= '\r')) f; writeFile "ncode.hs" reencoded}

然后重新编译代码。
让我知道它是否解决了问题。

如前所述,这还不够,但是如果您将此指令输入到 ghci 中。

ghci > readFile "code.hs"
-- print something

你向我们展示了原始结果,也许它会有所帮助。

【讨论】:

  • 感谢回复我,我目前在 mac 上使用 gedit 作为我的编辑器,你对我的编辑器配置有什么建议吗?
  • 不,我不知道该配置有任何问题。你能上传你要编译的确切文件吗?
  • 您在 Mac 上然后使用 vim 或 gvim,考虑到您正在使用的工具,我无法为您提供更多帮助。看看这个haskell.org/haskellwiki/Vim。正如尼尔指出的那样,它也可能与 eol 字符有关(window eol Vs Linux eol 会导致此类问题)。无论如何,最好的建议是转向 vim IMO。
  • 大声笑,我试图在第一行重新输入空格,并在终端中输入 :r,它可以工作,大声笑,谢谢你,我爱你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多