我是Haskell的新手,我正在尝试使用:运算符将字符串添加到字符串列表中,但不知怎的,它无法正常工作......此代码正在运行:
sl:(printH header):sl:(map printR t)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在最后添加字符串sl时,如下所示:
sl:(printH header):sl:(map printR t):sl
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误,这对我没有任何意义(sincwe其他连接确实顺利):
Couldn't match type '[Char]' with 'Char'
Expected type: [String] -> Char
Actual type: [String] -> String
In the first argument of 'map', namely 'printR'
...
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
Prelude> :type (:)
(:) :: a -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)
这告诉您该(:)函数左侧有一个项目,右侧有一个列表.鉴于:
a :: t
b :: t
c :: [t],
Run Code Online (Sandbox Code Playgroud)
a:b:c解析as a:(b:c),这是有效的,因为表达式b:c是类型的[t].同时,b:c:a解析as b:(c:a),它不起作用,因为c:a是错误的类型:a应该是类型[t],但实际上是类型t,并且c应该是类型t,但实际上是类型[t].在你的例子中,t是Char.
如果要将单个项添加到列表的末尾,可以使用concatenate (++):
xs ++ [i]
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |