请原谅我的简单大脑,但我无法理解Haskell,尤其是列表。我试图编写一个函数来返回指定长度的所有子串n,(每次从原始字符串的长度开始调用该函数时,这将减少一个 - 1)字符串(不导入模块)。我写了以下代码
allSubs :: Int -> Int -> String -> [String]
allSubs x n s
|n > x = (take n (drop x (tail s))) : allSubs (x+1) n s
无论多么有缺陷,我都不期待我的代码的逻辑或稳健性方面的帮助。但是我想知道是否有任何列表被创建。我之前只用C编码,我可以输入
else { return listx }
或者什么,但在这种情况下,列表的名称是什么?如果我想在另一个函数中使用该列表,例如,如果我想使用函数findRep在列表中找到重复的字符串,我可以写
|otherwise = findRep list
非常感谢任何建议。
答案 0 :(得分:1)
概念:
all substrings of (x:xs) = (all substrings beginning at position 0) ++
(all substrings of xs)
因此涉及两个函数:“所有子串”和“从位置0开始的所有子串”。我们称他们为allsubs
和pos0
。
现在考虑如何递归定义{{1}}:
pos0
,我们可以使用空字符串,也可以让(x:xs)
成为ys
的成员,并将pos0 xs
添加到其中现在您只需将此规范转换为Haskell。
全部放在一起:
x