Haskell 查找字符串是否包含子字符串的函数方法?

Haskell 查找字符串是否包含子字符串的函数方法?,haskell,recursion,functional-programming,iteration,tail-recursion,Haskell,Recursion,Functional Programming,Iteration,Tail Recursion,我不熟悉Haskell和函数式编程,想知道如何使用函数式递归迭代实现嵌套循环。特别是,我想编写一个函数,该函数将根据字符串中是否存在子字符串返回True或False 注意:标准库中必须有一个函数来完成此操作,但因为我正在学习函数编程,所以我想自己实现这样一个函数。您可以从编写一个计算所有后缀的函数开始: suffixes :: [a] -> [[a]] suffixes [1,2,3] = [[1,2,3], [2,3], [3], []] 这可以通过递归实现。在库中,这称为tails

我不熟悉Haskell和函数式编程,想知道如何使用函数式递归迭代实现嵌套循环。特别是,我想编写一个函数,该函数将根据字符串中是否存在子字符串返回True或False


注意:标准库中必须有一个函数来完成此操作,但因为我正在学习函数编程,所以我想自己实现这样一个函数。

您可以从编写一个计算所有后缀的函数开始:

suffixes :: [a] -> [[a]]
suffixes [1,2,3] = [[1,2,3], [2,3], [3], []]
这可以通过递归实现。在库中,这称为
tails

然后,您可以编写一个函数来检查一个字符串是否是另一个字符串的前缀

isPrefix :: String -> String -> Bool
isPrefix "a" "abc" = True
isPrefix "bc" "abc" = False
同样,递归就足够了

最后,利用这两个函数检查给定字符串是否是另一个给定字符串的某个后缀的前缀


(虽然效率不如,但编码很简单。)

工作起来很有魅力。只有一件事,函数实际上是
tail
而不是
tails
tails
,来自
数据。List
,是正确的<代码>尾部[1,2,3]=[[1,2,3],[2,3],[3],][3],][code>。