我是Haskell的新手,所以如果问题非常基本,我会道歉。
如果一个字符串包含在另一个字符串中,如何检查Haskell,例如" banna"和"香蕉"。
这是我到目前为止所做的,但它似乎无法正常工作:
isElementString :: String -> String -> Bool
isElementString (y:ys) (x:xs) = elem y (x:xs) && isElementString (ys) (xs)
非常感谢!
答案 0 :(得分:0)
考虑简单地迭代第二个字符串,在遇到第一个字符串时从第一个字符串中删除字符:
isElementString :: String -> String -> Bool
isElementString [] _ = True
isElementString _ [] = False
isElementString s@(x : xs) (y : ys) | x == y = isElementString xs ys
| otherwise = isElementString s ys
我们的想法是迭代,直到我们遇到第一个字符串中的所有字符,否则直到我们到达第二个字符串的末尾。在前一种情况下,我们得出结论,第一个字符串包含在第二个字符串中;在后一种情况下,它不是(因为我们仍然有第一个字符串中匹配的字符,但第二个字符串中没有字符匹配它们)。
答案 1 :(得分:0)
使用Data.List
' s isInfixOf :: Eq a => [a] -> [a] -> Bool
。
isInfixOf
函数接受两个列表并返回True
iff包含第一个列表,完整且完整,在第二个列表中的任何位置。
示例:
λ> isInfixOf "Haskell" "I really like Haskell."
True
λ> isInfixOf "Ial" "I really like Haskell."
False