Haskell 为什么是;变量不在范围内“;
代码有什么问题 我的Haskell平台是新的。我已经多次尝试调整格式。但它并没有一直起作用Haskell 为什么是;变量不在范围内“;,haskell,Haskell,代码有什么问题 我的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,
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
代码中存在缩进错误。这里更正如下:
encode :: Int -> String -> String
encode shift msg =
let ords = map ord msg
shifted = map (+ shift) ords
in map chr shifted
在像这样的块中,让。。。在…
或中…
,执行…
等,重要的是不要让后续行的缩进落后于第一行的缩进–这被称为“越位规则”,这就是Haskell如何确定哪些行属于哪个块
使用
GHCi H2-2.hs启动GHCi,或写入:l H2-2.hs
以加载文件。一旦它被加载,如果你想加载一些额外的更改,那么你就应该使用:r
似乎你从来没有加载过你的程序,因为它说“没有加载模块”。您是否使用ghci myfile.hs
运行了ghci
?Prelude>:r好的,没有加载模块
-这使您看起来好像没有实际加载模块。你需要先做:l
(然后你不需要:r
,直到你做了修改并想重新加载它)。你可以简化为encode shift msg=map(chr.(+shift).ord)msg
;通常,map f(map g xs)==map(f.g)xs
。
encode :: Int -> String -> String
encode shift msg =
let ords = map ord msg
shifted = map (+ shift) ords
in map chr shifted