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

时间:2017-03-04 07:05:37

标签: haskell recursion functional-programming iteration tail-recursion

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

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

1 个答案:

答案 0 :(得分:3)

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app'/>

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

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

tails

再次,递归就足够了。

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

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