【发布时间】:2019-01-10 13:34:48
【问题描述】:
TL;DR:我想要filter ((== 4) . length) . subsequences 的确切行为。仅使用subsequences 也会创建可变长度的列表,这需要大量时间来处理。由于最后只需要长度为 4 的列表,因此我认为必须有更快的方法。
我有一个函数列表。该列表的类型为[Wor -> Wor]
列表看起来像这样
[f1, f2, f3 .. fn]
我想要的是n 函数列表,同时保持这样的顺序
输入:[f1, f2, f3 .. fn]
参数:4 个函数
输出:4 个函数的列表。
如果子列表中有f1,则预期输出将始终位于列表的head。
如果子列表中有f2,并且如果子列表没有f1,则f2 将位于head。如果fn 在子列表中,它将位于last。
一般来说,如果列表中有 fx,它永远不会在 f(x - 1) 前面。
在生成子列表时基本保持主列表的顺序。
可以假设列表的长度总是大于给定参数。
我刚刚开始学习 Haskell,所以我没有尝试过那么多,但到目前为止,我尝试过的是这样的:
使用subsequences 函数并在其上应用(filter (== 4) . length) 的生成排列似乎会生成正确的排列-但它不会保留顺序-(它保留了顺序,我将它与我自己的函数混淆了)。
那我该怎么办?
如果可能的话,Hackage 或 Stackage 中是否存在可以执行此操作的函数或函数组合?因为我想了解来源。
【问题讨论】:
-
我对描述有点困惑。您是否只想获取一个列表(函数,尽管您似乎没有使用这些函数的事实,因此它应该适用于任意类型的列表)并生成长度正好为 4 的所有子列表,但每个子列表与元素在原始列表中出现的顺序相同?
-
这听起来像
take 4 [f1, ..., fn] -
subsequences绝对应该以您想要的方式保持秩序。你能举一个它做错事的例子吗? (它甚至不必涉及函数,对吧?可以是数字列表吗?) -
我已经更新了这个问题。很抱歉,如果它令人困惑。
标签: list haskell optimization combinations