Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Haskell:字符串的子序列_String_Haskell - Fatal编程技术网

String Haskell:字符串的子序列

String Haskell:字符串的子序列,string,haskell,String,Haskell,我是Haskell的新手,我找到了一些可以练习的例子,但不知道如何处理它们。 我需要将“abcd”拆分为子序列 addoneall x xs = zipWith ((++) . (map (x:))) ([]:xs) (xs ++ [[]]) 致: 我发现我必须使用子序列函数 subsequences :: [a] -> [[a]] 我应该如何继续?您可以使用建议的子序列来执行此操作。请查看示例: import Data.List subsequences "abcd" 输出: [

我是Haskell的新手,我找到了一些可以练习的例子,但不知道如何处理它们。 我需要将
“abcd”
拆分为子序列

addoneall x xs = zipWith ((++) . (map (x:))) ([]:xs) (xs ++ [[]])
致:

我发现我必须使用子序列函数

subsequences :: [a] -> [[a]]

我应该如何继续?

您可以使用建议的
子序列来执行此操作。请查看示例:

import Data.List

subsequences "abcd"
输出:

["","a","b","ab","c","ac","bc","abc","d","ad","bd","abd","cd","acd","bcd","abcd"]
["","a","b","c","d","ab","ac","bc","ad","bd","cd","abc","abd","acd","bcd","abcd"]
注意:
子序列
不会对输出进行排序。但是,如果需要排序的输出,可以使用以下选项:

import Data.List
import Data.Function

sortBy (compare `on` length) $ subsequences "abcd"

import Data.List 
import GHC.Exts

sortWith length $ subsequences "abcd"
输出:

["","a","b","ab","c","ac","bc","abc","d","ad","bd","abd","cd","acd","bcd","abcd"]
["","a","b","c","d","ab","ac","bc","ad","bd","cd","abc","abd","acd","bcd","abcd"]
查看此处了解更多信息:


这是一个简单的递归任务

假设您有一个子列表的子序列列表。如何生成较长列表的子序列列表

我建议将子序列列表按其长度分为子序列列表。所以您有
[[subsequencelength 0],[subsequencelength 1],…]
。很容易看出,通过将一个元素添加到较短的子序列中,可以生成较长的子序列:
[[子序列长度0],[子序列长度0加一个元素]++[子序列长度1],[子序列长度1加一个元素]++[子序列长度2],…]

要对齐不同长度的子序列列表,请将空列表添加到子序列列表中。然后将一个元素附加到较短的子序列,并使用较长的子序列列表连接

addoneall x xs = zipWith ((++) . (map (x:))) ([]:xs) (xs ++ [[]])
现在

生成所有长度的子序列列表-
foldr
通过在子序列列表中添加一个元素以获得较短的输入,生成子序列列表。然后,
concat
将不同长度的子序列列表合并为一个

Prelude Data.List> subsequences "abcd"
["","a","b","c","d","ab","ac","ad","bc","bd","cd","abc","abd","acd","bcd","abcd"]

是的,我知道。。但是这使得结果与上面所示的不一样。。我想我必须做一些其他的事情,但在我读到的章节中没有显示。只需要获取字符串并将其子序列写入特定的格式。。我是begginer:)一个简单的方法可以是(近似!)
排序(比较长度)$subsequences“abcd”
,但请自己尝试一种直接的方法…您确定序列以
…,bcd,acd,abcd]
结束,而不是
…,acd,bcd,abcd]
?是的,这是我所做的,但我需要得到这个输出:[“,a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,bcd,acd,abc]@user2497254更新了答案以包含排序方法。让我们调试它,好吗?:)首先打开
ghci
并尝试逐行复制粘贴代码,如果有问题,请告诉我。@user2497254在.hs文件中不能有“顶级裸表达式”。将其转换为一个定义,如
sortedSubsequences=sortBy(compare`on`length)。子序列
,将文件加载到ghci中,并使用排序的子序列“abcd”进行测试。子序列