在Haskell中清除排列组合

时间:2013-12-27 19:17:41

标签: haskell

在Haskell中以整数列表的形式组成两个排列的简洁方法是什么?

我知道A !! i是中缀数组访问运算符,就像C ++等效A[i]一样,但我对如何映射它感到困惑。在C ++中,你会循环我让C[i] = A[B[i]]

2 个答案:

答案 0 :(得分:7)

如果您选择将它们存储在Data.Vector包中的Data.Vector.Unboxedvector中,则可以直接使用backpermute组合器。

那么你想要的只是backpermute a b,你的排列可以存储在盒子里,并且在内存中打包在一起,也可以减少你的内存占用。

答案 1 :(得分:1)

C ++中Hospell等效的循环将是这样的:

c = map (a !!) b

所以你可以说

compose = map . (!!)

并写

c = compose a b

!!用于列表,而不是数组,索引效率不高。您可能需要考虑使用Vector