Haskell试图在[String]中改变字符串

时间:2015-12-23 12:50:49

标签: haskell

movex [] a s = []    
movex (x:xs) a s
| elem a x = moveNow x a s
| otherwise = x : (movex xs a s)
where
  moveNow x a s
    | s == 'l' = moveNow2 x a
    where
        moveNow2 [] _ = []
        moveNow2 (x:y:xs) a
          | x == ' ' && y == a = a : x : moveNow2 (y:xs) a
          | otherwise = x : moveNow2 (y:xs) a

< - 这就是我现在所得到的

我正在尝试创建一个遍历[string]的函数,找到正确的字符串,然后将其变异。

给定输入

func ["abc", "dfg"] f l -- move f in this list 1 space left --

预期产出

["abc", "fdg"]

现在我被困在movex函数,它给我错误

Couldn't match expected type `Char' with actual type `[Char]'
In the first argument of `(:)', namely `x'
In the expression: x : (movex xs a s)

1 个答案:

答案 0 :(得分:1)

直接解决错误是替换

| elem a x = moveNow x a s

使用

| elem a x = moveNow x a s : movex xs a s

或者,可能

| elem a x = moveNow x a s : xs

取决于您在第一场比赛后想要做的事情:继续寻找某个角色,或保持其他角色不受影响。

moveNow函数的返回类型为String[Char]movex[String][[Char]],'为什么编译器抱怨。

为避免此类问题(或更容易修复),请考虑编写显式类型签名,如下所示:

movex :: [String]->String->String->[String]