Che*_*arl 0 recursion trace haskell
我在Mac上,我通过命令行运行Haskell.这是我的代码我递归地反转列表.
import Debug.Trace
reverse1 :: (Show a) => [a] -> [a]
reverse1 [] = []
reverse1 (x:xs) = trace(“input xs: “ ++ show xs) $ reverse1 xs ++ [x]
Run Code Online (Sandbox Code Playgroud)
赋值是以递归方式执行,并显示跟踪.如果我在添加跟踪信息后删除跟踪信息,它就会反过来.这是我收到的错误.
[1 of 1] Compiling Main ( reverse.hs, interpreted )
reverse.hs:4:24: lexical error at character '\8220'
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
你有一个复制和粘贴问题:你的代码片段使用花哨的引号(“)而不是普通的(")和Haskell不知道如何解析它.
在错误消息中,"词法错误"表示您的语法有问题; 具体来说,它不知道如何处理'\8220'ASCII表示的字符“.
假设您的控制台正确支持Unicode,您可以看到像这样的转义码对应的字符putStrLn:
Prelude GHC.Exts> putStrLn "\8220"
“
Run Code Online (Sandbox Code Playgroud)
这可能有助于您将来了解类似的错误消息.
如果您在Emacs中,另一个选项是使用C-x 8 <RET>允许您按编号输入Unicode字符的命令(8220在本例中).不幸的是,Emacs期望一个十六进制的数字,而Haskell提供一个基数为10的数字,所以你必须明确你的基数:
C-x 8 <RET> #10r8220
“
Run Code Online (Sandbox Code Playgroud)