Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Haskell中表示2D向量的正确方法是什么?_List_Haskell_Vector - Fatal编程技术网

List 在Haskell中表示2D向量的正确方法是什么?

List 在Haskell中表示2D向量的正确方法是什么?,list,haskell,vector,List,Haskell,Vector,我看到了一些选项:可以使用列表,可以使用向量,可以使用元组,可以使用带有x和y字段的自定义数据类型,等等。在大多数语言中,由于某些特定原因,一种方式优于另一种方式。例如,C++中,使用类的性能更高。 在Haskell中,哪一种被认为是实现N-d向量的语言方法?我个人使用UArray实现N-d向量,因为这样的数组是严格的,它允许我组合不同范数的数组。我甚至有一个扩展(实际上是一个推广欧几里德向量的类Vector),它允许我添加矩阵支持。线性包()中的V2类型既有性能,又有一整套围绕它定义的标准操作

我看到了一些选项:可以使用列表,可以使用向量,可以使用元组,可以使用带有
x
y
字段的自定义数据类型,等等。在大多数语言中,由于某些特定原因,一种方式优于另一种方式。例如,C++中,使用类的性能更高。


在Haskell中,哪一种被认为是实现N-d向量的语言方法?

我个人使用UArray实现N-d向量,因为这样的数组是严格的,它允许我组合不同范数的数组。我甚至有一个扩展(实际上是一个推广欧几里德向量的类
Vector
),它允许我添加矩阵支持。

线性
包()中的
V2
类型既有性能,又有一整套围绕它定义的标准操作。

@TokenMacGuy编辑,谢谢。表示单个向量(或点)使用数据类型-您可能希望x和y字段严格,因此使用一对(元组)不是最好的选择,因为它的数据不严格。@Stephentelley我为什么要严格?Viclib-为了性能。在x和y元素中保持Vec多态性是有意义的,但很可能您将使用双精度表示它们。如果您知道您将使用双精度或整数等非固定标量类型,您希望GHC能够符合当你操作它们时,你会得到优化的Prim-OPS。(编辑)“C++中,使用类的性能更高”。这不是真的,在Haskell中也没有等价的东西。在C++中,使用内联/矢量化优化技巧最快,它可以很好地完成栈上的类对象。有时,它可以有益于有C风格的数组,而能够编写一些NE的优化版本。w操作你不想成为一个类方法。我喜欢它,也是我现在使用的(注意,我两年前问了这个问题:P)。我只是希望它有更多的文档记录(以下类型很好,但是如果你不知道在哪里找函数呢?)…而且Gloss包与它兼容。