代码有什么问题。
我的Haskell平台是新的。而且我已经尝试过多次调整格式。但这并不总是有效。
import Data.Char
import Data.List
encode :: Int -> String -> String
encode shift msg =
let ords = map ord msg
shifted = map (+ shift) ords
in map chr shifted
结果总是这样
Prelude> :r
Ok, no modules loaded.
Prelude> :type encode
<interactive>:1:1: error: Variable not in scope: encode
当我加载文件时,它会显示
Prelude> :l H2-2.hs
[1 of 1] Compiling Main ( H2-2.hs, interpreted )
H2-2.hs:56:3: error: parse error on input ‘shifted’
|
56 | shifted = map (+ shift) ords
| ^^^^^^^
Failed, no modules loaded.
答案 0 :(得分:6)
您的代码中存在缩进错误。此处已得到纠正:
encode :: Int -> String -> String
encode shift msg =
let ords = map ord msg
shifted = map (+ shift) ords
in map chr shifted
在诸如let ... in ...
或where ...
,do ...
等的块中,重要的是不允许后续行的缩进落后于第一行的缩进–这称为“越位”规则”,这就是Haskell如何确定什么属于哪个区块。
使用ghci H2-2.hs
启动GHCi或写入:l H2-2.hs
以加载文件。加载完成后,如果要加载其他更改,则只能使用:r
。