Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么是;变量不在范围内“;_Haskell - Fatal编程技术网

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,

代码有什么问题

我的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

代码中存在缩进错误。这里更正如下:

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