Haskell:String的子序列

use*_*254 0 string haskell

我是Haskell的新手,我找到了一些练习的例子,但不知道如何处理它们.我需要分成"abcd"几个子序列.

至:

["",a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,bcd,acd,abcd]
Run Code Online (Sandbox Code Playgroud)

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

subsequences :: [a] -> [[a]]
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Tam*_*Tas 6

您可以subsequences按照建议查看示例:

import Data.List

subsequences "abcd"
Run Code Online (Sandbox Code Playgroud)

输出:

["","a","b","ab","c","ac","bc","abc","d","ad","bd","abd","cd","acd","bcd","abcd"]
Run Code Online (Sandbox Code Playgroud)

注意: subsequences不对输出进行排序.但是,如果您想要排序的输出,您可以使用以下内容:

import Data.List
import Data.Function

sortBy (compare `on` length) $ subsequences "abcd"
Run Code Online (Sandbox Code Playgroud)

要么

import Data.List 
import GHC.Exts

sortWith length $ subsequences "abcd"
Run Code Online (Sandbox Code Playgroud)

输出:

["","a","b","c","d","ab","ac","bc","ad","bd","cd","abc","abd","acd","bcd","abcd"]
Run Code Online (Sandbox Code Playgroud)

点击此处了解更多信息:

  • `sortWith长度.subsequences` (2认同)