我是一个初学者哈斯克尔。我试图创建一个有两个参数的函数:一个字符和一个字符串。 该函数应该检查字符串,并检查给定的字符是否在字符串中,然后返回表示字符串中字符位置的整数列表。Haskell的类型不匹配INT和[INT]
我的代码是:
tegnPose :: Char -> String -> [Int]
tegnPose c [] = []
tegnPose c (x:xs) = [if not (xs !! a == c)
then [a] ++ tegnPose c xs
else tegnPose c xs |a <- [0.. length xs - 1]]
这与列表理解递归函数。
的错误,我得到:
Uke4.hs:14:7: error:
* Couldn't match expected type `Int' with actual type `[Int]'
* In the expression: [a] ++ tegnPose c xs
In the expression:
if not (xs !! a == c) then [a] ++ tegnPose c xs else tegnPose c xs
In the expression:
[if not (xs !! a == c) then
[a] ++ tegnPose c xs
else
tegnPose c xs |
a <- [0 .. length xs - 1]]
|
14 | then [a] ++ tegnPose c xs
| ^^^^^^^^^^^^^^^^^^^^
Uke4.hs:15:7: error:
* Couldn't match expected type `Int' with actual type `[Int]'
* In the expression: tegnPose c xs
In the expression:
if not (xs !! a == c) then [a] ++ tegnPose c xs else tegnPose c xs
In the expression:
[if not (xs !! a == c) then
[a] ++ tegnPose c xs
else
tegnPose c xs |
a <- [0 .. length xs - 1]]
|
15 | else tegnPose c xs |a <- [0.. length xs - 1]]
我不明白的不匹配是如何发生的,因为递归函数应该只运行通过。
默认情况下,列表理解返回一个列表。试图返回里面的另一个列表给你列表,这不是你想要的。我会重写,以避免理解。 –