相关疑难解决方法(0)

一种生成给定长度组合的更快方法,保留顺序

TL;DR:我想要确切的行为作为filter ((== 4) . length) . subsequences. 仅使用subsequences还会创建可变长度的列表,这需要大量时间来处理。由于最终只需要长度为 4 的列表,我认为必须有一种更快的方法。


我有一个功能列表。该列表具有类型[Wor -> Wor]

列表看起来像这样

[f1, f2, f3 .. fn]

我想要的是一个n函数列表列表,同时保留这样的顺序

输入 : [f1, f2, f3 .. fn]

参数:4 个函数

输出:4 个函数的列表。

如果f1子列表中有 ,则预期输出将始终位于head列表中。

如果f2子列表中有 a而子列表没有f1,f2则位于head。如果fn在子列表中,它将在last.

一般来说,如果fx列表中有 a ,它永远不会在f(x - 1).

生成子列表时基本上保留主列表的顺序。

可以假设列表的长度总是大于给定的参数。

我刚刚开始学习 Haskell,所以我还没有尝试那么多,但到目前为止,这是我尝试过的:

使用subsequences函数生成排列并对其进行应用(filter (== 4) . length) …

optimization combinations haskell list

4
推荐指数
1
解决办法
261
查看次数

Haskell - 列表列表中的元素组合列表

假设我有一些列表列表,[[a, b], [c], [d, e, f], ...]其中列表中的列表可以是任意长度。我已经对列表进行了排序,使得最短的列表排在第一位,并且我想生成列表中所有元素组合的列表,以便我得到一个列表[[a, c, d, ...], [a, c, e, ...], [a, c, f, ...], [b, c, d, ...], ...],即通过更改从最后一个列表中选取的元素来生成组合首先,向上移动列表以更改类似于计数的元素。

使用这个列表,我将使用列表的头部来使用惰性求值,因为我只需要 1 个满足谓词的列表。如何生成列表?

haskell functional-programming list-comprehension combinatorics nested-lists

4
推荐指数
1
解决办法
179
查看次数

在 Haskell 中过滤具有相同数量不同元素的列表

我非常新的Haskell和我的数据data Instruction = Add | Sub | Mul | Div | Dup | Pop deriving (Eq,Ord,Show,Generic),我用所有可能的组合生成列表Mul和Dup与mapM (const [Mul, Dup]) [1..n])大小为n的。

我只想要以开头Dup和结尾的列表,Mul所以我使用了filter((== Mul) . last)(filter((== Dup) . head) (mapM (const [Mul, Dup]) [1..n]))但我也只想要具有相同数量的列表Mul,并Dup在他们,但我似乎无法拿出这样做的方式。我如何过滤这个,是否有更有效的方法来做到这一点,因为随着列表变大可能会有大量的组合?

样本名单是这样的:[Dup,Mul,Dup,Mul]和[Dup,Dup,Mul,Mul]尺寸为4的名单。

haskell list filter

2
推荐指数
1
解决办法
89
查看次数