我的语法错误的来源

安德鲁·麦肯齐

我正在学习Haskell,并正在从书中编写示例程序。下面的模块无法编译,并在ghci和ghc中给我以下错误:

“ Optimal.hs:15:23:输入'='时解析错误”

有什么想法,我看不到吗?


module Optimal (optimalPath) where

import RoadSystem

optimalPath :: RoadSystem -> Path
optimalPath roadSystem =
    let (bestAPath, bestBPath) = foldl roadStep ([], []) roadSystem
    in if sum (map snd bestAPath) <= sum (map snd bestBPath)
            then reverse bestAPath
            else reverse bestBPath

roadStep :: (Path, Path) -> Section -> (Path, Path)
roadStep (pathA, pathB) (Section a b c) =
    let timeA = sum (map snd pathA)
        timeB = sum (map snd pathB)
        forwardTimeToA = timeA + a
        crossTimeToA = timeB + b + c
        forwardTimeToB = timeB + b
        crossTimeToB = timeA + a + c
        newPathToA = if forwardTimeToA <= crossTimeToA
                        then (A, a):pathA
                        else (C, c):(B, b):pathB
        newPathToB = if forwardTimeToB <= crossTimeToB
                        then (B, b):pathB
                        else (C, c):(A, a):pathA
    in (newPathToA, newPathToB)
巴库留

有什么想法,我看不到吗?

当您使用制表符进行缩进时,会发生这种情况。哈斯克尔标准任务承担的制表位8个字符,所以编译器实际上是认为你的代码是:

module Optimal (optimalPath) where

import RoadSystem

optimalPath :: RoadSystem -> Path
optimalPath roadSystem =
        let (bestAPath, bestBPath) = foldl roadStep ([], []) roadSystem
        in if sum (map snd bestAPath) <= sum (map snd bestBPath)
                then reverse bestAPath
                else reverse bestBPath

roadStep :: (Path, Path) -> Section -> (Path, Path)
roadStep (pathA, pathB) (Section a b c) =
        let timeA = sum (map snd pathA)
                timeB = sum (map snd pathB)
                forwardTimeToA = timeA + a
                crossTimeToA = timeB + b + c
                forwardTimeToB = timeB + b
                crossTimeToB = timeA + a + c
                newPathToA = if forwardTimeToA <= crossTimeToA
                                                then (A, a):pathA
                                                else (C, c):(B, b):pathB
                newPathToB = if forwardTimeToB <= crossTimeToB
                                                then (B, b):pathB
                                                else (C, c):(A, a):pathA
        in (newPathToA, newPathToB)

并且在第23行第23行处有足够的把握:

        let timeA = sum (map snd pathA)
                timeB = sum (map snd pathB)

这是语法错误。

要解决这个问题:

  • 不要使用制表符缩进。 每个编辑器都允许您配置Tab键以插入可配置数量的空格而不是一个选项卡,因此不会出现“我必须多次按空格键”的问题。
  • 在编辑器中使用制表符8。请注意,如果您将代码发送给其他人,则在修改代码时可能会遇到相同的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的SQL语法错误

来自分类Dev

我的查询语法错误

来自分类Dev

我的语法错误MySQL

来自分类Dev

我有语法错误帮我

来自分类Dev

我的if else语句中的语法错误

来自分类Dev

我的SQL Create Table As的语法错误

来自分类Dev

我函数中的Haskell语法错误

来自分类Dev

我似乎找不到的语法错误

来自分类Dev

收到语法错误,我无法修复

来自分类Dev

我的PHP代码的语法错误

来自分类Dev

我不知道的语法错误

来自分类Dev

MySQL语法错误:我缺少什么?

来自分类Dev

我的函数中的Haskell语法错误

来自分类Dev

我在SQLite中有语法错误

来自分类Dev

我的C代码中的语法错误?

来自分类Dev

我在SQL中收到语法错误

来自分类Dev

我的 postgresql 语法错误 (%) 符号

来自分类Dev

mysql更新查询中的语法错误我的语法是正确的

来自分类Dev

收到语法错误,但我找不到语法错误

来自分类Dev

我的错误是什么,显示SQL语法错误?

来自分类Dev

MySQL-我的代码中解析错误(语法错误)

来自分类Dev

语法错误,但我没有看到错误

来自分类Dev

我在'nchar'附近存在语法错误的错误

来自分类Dev

SQL语法错误。我的句法错误在哪里?

来自分类Dev

我收到解析错误:语法错误,文件意外结束

来自分类Dev

迭代9次,我认为我有语法错误

来自分类Dev

语法错误我加班了我打开了终端

来自分类Dev

我该如何工作?我不断收到语法错误

来自分类Dev

Swift语法错误?