就像标题所说我在使用Haskell打印出符号代码及其相应的符号时遇到了一些麻烦......我现在所拥有的是:
import Data.Char
import Debug.Trace
foo z | trace ("Symbolcode " ++ show z ++ " is " ++ (chr z)) False = undefined
foo z = if (z <= 128)
then foo (z+1)
else show "All done."
...我收到这样的错误:
Couldn't match expected type `[Char]' with actual type `Char'
In the return type of a call of `chr'
In the second argument of `(++)', namely `(chr z)'
In the second argument of `(++)', namely `" is " ++ (chr z)'
我做错了什么,是否有更简单的方法(例如不使用跟踪模块)?
答案 0 :(得分:5)
您需要将Char
生成的chr z
转换为String
(例如,通过[chr z]
或return (chr z)
或{{1}等)。否则,您无法在使用chr z : []
之前将其附加到字符串。
++
答案 1 :(得分:4)
将trace
用于调试以外的任何内容都是一个坏主意,因为the execution order is unreliable。
如果要对范围内的所有整数执行某些操作,请首先创建要处理的整数列表[0 .. 127]
。要输出某些文本,您应该使用putStrLn
等IO操作。与trace
不同,putStrLn
将始终在应用时执行。 Map对您的列表执行此IO操作以打印所有字符。
showCharCode n = putStrLn ("Symbol code " ++ show n ++ " is " ++ [chr n])
foo = mapM_ showCharCode [0 .. 127]