首页 > 解决方案 > 如何摆脱 Haskell 列表中列表的子列表?

问题描述

我对 Haskell 有点陌生,想知道如何执行以下操作:

L = [[1,2],[1,2,3],[1,2,3,4]]

如何摆脱所有子列表([1,2], [1,2,3])并仅获得结果[[1,2,3,4]]

标签: listhaskell

解决方案


如果我理解正确的问题,解决方案可能如下所示:

import Data.List                                                               

-- Get only if element is not subsequence of any other x element                                                                             
filterOutSublists x = filter (not . (isSub)) x                                 
  where
    -- Check if given element is subsequence of any of x element                                                                     
    isSub y = foldl (\acc y' -> acc || (y `elem` (init $ subsequences y'))) False x

但是这个解决方案的 O(n) 复杂度非常差,所以对于长列表是没有用的。


推荐阅读