我正在尝试查找字符串列表中的任何字符串中是否已使用某些字母。如果是 - 选择下一个字母进行比较。如果否 - 返回这封信并更新初始列表。
要签入我正在使用的列表:
check:: [String] -> Char -> Char
check s c
| any (elem c) s = check s (next c)
| otherwise = do update s c
return c
但这给了我一个错误:
无法将类型 '[Char]' 与 'Char' 匹配
预期类型:[String] -> [Char] -> Char
实际类型:[String] -> [Char] -> [Char]
在 ' stmt 中做'块:更新sc
我的更新函数有以下声明:
update:: [String] -> Char -> [String]
有没有正确的方法在警卫中执行 2 个动作otherwise
?我需要返回c以便在另一个递归函数中使用它,该函数将Char
c和 updated [String]
s作为参数
当我让这个函数只返回c而不更新列表时,没有错误:
check:: [String] -> Char -> Char
check s c
| any (elem c) s = check s (next c)
| otherwise = c
欢迎任何提示。
更新:我的下一个功能是:
next :: Char -> Char
next 'Z' = 'A'
next c = chr (ord c + 1)
对于更新,我尝试过:
update:: [String] -> Char -> [String]
update s c = s ++ [[c]]
问题是,稍后,我需要使用[String]
which 是更新的结果,以及Char
c(检查结果)到另一个函数中。这就是为什么在执行检查后,我需要返回一个值,并用它更新一个列表。