Haskell跟踪功能

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)

Tik*_*vis 7

你有一个复制和粘贴问题:你的代码片段使用花哨的引号()而不是普通的(")和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)

  • @ChelseaCarl:这听起来像编辑器或操作系统设置有问题.我不一定能帮到你,所以我建议你在[超级用户](http://superuser.com/)上提出另一个关于如何输入正常报价的问题,包括你的编辑器,操作系统和键盘布局.问题细节. (2认同)