gpt4 book ai didi

Haskell - 获取多个解析错误

转载 作者:行者123 更新时间:2023-12-02 10:54:04 25 4
gpt4 key购买 nike

我最近完成了我学校所需的蛇和梯子游戏,但我的同伴可以完美地编译此代码,而我一遍又一遍地遇到相同的错误。我尝试了许多不同的方法,但我不太确定还能做什么。

我尝试下载 Haskell 的早期版本,但没有帮助。我还使用“cabal install lens”安装了镜头包,并在编译程序之前使用 ghci -> import Control.Lens 导入了 Control.Lens 包。

当我尝试编译代码时,出现以下错误。文件名为 Main.hs

ghc -o main Main.hs
[1 of 1] Compiling Main ( Main.hs, Main.o )

Main.hs:6:1: parse error on input module

我还在下面附上了我的代码。感谢任何愿意提供帮助的人。
module Main where

import Data.List
import Data.Sequence
import Data.Foldable
import Control.Lens

data Game = G Int Int Int [Int] [Bool] [Bool] [Bool] [Int] [Property] Int
data Property = Int | E | A | D
displayRow game@(G rows cols nplayers pos e a d drolls props turn) n = unlines [ '+' : concat (replicate n "---+") , '|' : concat (replicate n " |")]
display game@(G 0 cols nplayers pos e a d drolls props turn) = ""
display game@(G rows cols nplayers pos e a d drolls props turn) = (displayRow game cols) ++ display (G (rows - 1) cols nplayers pos e a d drolls props turn)
go game@(G rows cols nplayers pos e a d drolls props 0) _ = display game
go game@(G rows cols nplayers pos e a d drolls props turn) i
| elem (rows*cols) pos = display game
| nplayers == i = go (G rows cols nplayers pos e a d drolls props (turn - 1)) 0
| otherwise = go (move (G rows cols nplayers pos' e a d (tail drolls) props turn) i roll) (i + 1) where
roll = if d!!i then 2*(head drolls) else (head drolls)
move (G rows cols nplayers pos e a d drolls props turn) i j = case (elemIndex posij pos) of
Just k -> (move (G rows cols nplayers pos' e' a' d' drolls props turn) k 1)
Nothing -> (G rows cols nplayers pos' e' a' d' drolls props turn)
where
posij = if (pos!!i + j) > rows*cols then rows*cols else pos!!i + j
pos'
| props!!posij > posij = if e!!i then pos & ix i .~ (2*(props!!posij) - posij) else pos & ix i .~ (props!!posij)
| props!!posij < posij = if a!!i then pos & ix i .~ posij else pos & ix i .~ (props!!posij)
| otherwise = pos & ix i .~ posij
e'
| props!!posij > posij = if e!!i then e & ix i .~ False else e
| props!!posij == E = e & ix i .~ True
| otherwise = e
a'
| props!!posij < posij = if a!!i then a & ix i .~ False else a
| props!!posij == A = a & ix i .~ True
| otherwise = a
d' = if (props!!posij) == D then (d & ix i .~ True) else (d & ix i .~ False)
instance Show Game where
show game@(G rows cols nplayers pos e a d drolls props turn) = go game 0
build (l:ls) = build' (G 0 0 0 [] [] [] [] [] [] 0) (l:ls) where
build' game (l:ls) = build' (update game l) ls
build' game [] = game
update (G rows cols nplayers pos e a d drolls props turn) s = case (words s) of
"board":l -> G (nums!!0) (nums!!1) nplayers pos e a d drolls [i | i <- [0..(nums!!0)*(nums!!1)]] turn
"players":l -> G rows cols (nums!!0) [0 | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] drolls props turn
"dice":l -> G rows cols nplayers pos e a d (cycle nums) props turn
"ladder":l -> G rows cols nplayers pos e a d drolls (props & ix (nums!!0) .~ (nums!!1)) turn
"snake":l -> G rows cols nplayers pos e a d drolls (props & ix (nums!!0) .~ (nums!!1)) turn
"powerup":"escalator":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const E) props) turn
"powerup":"antivenom":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const A) props) turn
"powerup":"double":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const D) props) turn
"turns":l -> G rows cols nplayers pos e a d nums props (turn + (nums!!0)) where
nums = map read l :: [Int]
readFrom input = build (lines input)
main = do
input <- getContents
putStr $ show $ readFrom input

最佳答案

  • module行必须高于导入
  • 不需要在 where 之后缩进所有内容在模块行
  • 为了便于阅读,在每个函数/数据声明/实例之间放置一个空行
  • 为每个函数提供类型签名
  • 不要等到写完再编译,你应该逐步编译和测试,这样你就可以用最少的努力修复设计缺陷
  • 使用 -Wall 编译为您提供合理的更改建议以提高可读性

  • 一旦你将它清理到一个可行的状态,你就可以看到你得到了什么类型的错误并努力修复这些错误。

    关于Haskell - 获取多个解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218769/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com