查找字符串是否包含子字符串的功能方法?

Functional way of finding if string contains substring?

我是 Haskell 和函数式编程的新手,想知道如何使用函数式递归迭代来实现嵌套循环。特别是,我想编写一个函数,根据字符串中是否存在子字符串 return 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

同样,递归就足够了。

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

(效率不如Knuth-Morris-Pratt,但编码简单。)