在Haskell中以整数列表的形式组成两个排列的简洁方法是什么?
我知道A !! i
是中缀数组访问运算符,就像C ++等效A[i]
一样,但我对如何映射它感到困惑。在C ++中,你会循环我让C[i] = A[B[i]]
。
答案 0 :(得分:7)
如果您选择将它们存储在Data.Vector
包中的Data.Vector.Unboxed
或vector
中,则可以直接使用backpermute
组合器。
那么你想要的只是backpermute a b
,你的排列可以存储在盒子里,并且在内存中打包在一起,也可以减少你的内存占用。
答案 1 :(得分:1)
C ++中Hospell等效的循环将是这样的:
c = map (a !!) b
所以你可以说
compose = map . (!!)
并写
c = compose a b
但!!
用于列表,而不是数组,索引效率不高。您可能需要考虑使用Vector
。