1

我是Haskell和Functional编程的新手,想知道如何使用函数递归迭代实现嵌套循环。特别是,我想编写一个函数,它将返回True或False,具体取决于字符串中是否存在子字符串。查找字符串是否包含子字符串的函数方法?

注意:在标准库中必须有一个函数来做到这一点,但是,因为我正在尝试学习函数式编程,所以我想自己实现这样一个函数。

回答

3

您可以通过编写其计算所有后缀的函数开始:

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高效,但它是简单的代码。)

+0

工作就像一个魅力。只是一件事,功能实际上是“尾巴”而不是“尾巴”。 –

+1

来自'Data.List'的'tails'是正确的。 '尾巴[1,2,3] == [[1,2,3],[2,3],[3],[]]''。 –

相关问题