Haskell从String中删除Chars

use*_*850 1 string haskell char

我正在尝试编写表单的函数

f :: String -> [String]
f str = ...
Run Code Online (Sandbox Code Playgroud)

返回通过从中删除一个字符而形成的所有字符串的列表str.例如:

ghci> f "stack"
["tack","sack","stck","stak","stac"]
Run Code Online (Sandbox Code Playgroud)

因为String并且[Char]是同义词,我可以使用索引,但我知道你应该避免在Haskell中这样做.除了使用索引之外还有更好的方法吗?

Jos*_*lin 7

您可以像这样使用递归:

f :: [a] -> [[a]]
f [] = []
f (s:ss) = ss : map (s:) (f ss)
Run Code Online (Sandbox Code Playgroud)

  • 考虑一下如果`f [] = [[]]`会发生什么.然后`f"a"= f('a':[])= []:map('a':)(f [])= []:map('a':)([[]])= []:['a':[]] = []:["a"] = [[],"a"]` (2认同)