首页
学习
活动
专区
圈层
工具
发布

重载(+)
EN

Stack Overflow用户
提问于 2011-10-04 18:40:28
回答 2查看 1.2K关注 0票数 12

我正在尝试在Haskell中定义一个Vector3数据类型,并允许在其上使用(+)运算符。我尝试了以下几种方法:

代码语言:javascript
复制
data Vector3 = Vector3 Double Double Double    
Vector3 x y z + Vector3 x' y' z' = Vector3 (x+x') (y+y') (z+z')

但ghci抱怨(+)的出现不明确。我不明白为什么出现的内容是不明确的;类型检查器肯定可以推断出xx'y等具有类型Double,因此正确的运算符是Prelude.+

我知道我可以让Vector3成为Num类型类的一个实例,但这对我来说限制太多了;我不想定义一个向量与另一个向量的乘法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-04 19:49:09

在Haskell中重载名称的唯一方法是使用类型类,因此您有三种选择:

  • 使Vector成为Num的一个实例,只需让乘法返回一个类似于the numeric preludeerror.
  • Use,它定义了更多细粒度的数值类。
  • 选择了其他名称,如.+.或类似的名称来进行向量加法。
票数 19
EN

Stack Overflow用户

发布于 2011-10-04 18:47:31

我知道我可以让Vector3成为Num类型类的一个实例,但这对我来说限制太多了;我不想定义一个向量与另一个向量的乘法。

不过,这将是最简单的解决方案。您可以将乘法定义为

代码语言:javascript
复制
(*)  =  error "vector multiplication not implemented"

想一想你免费得到的向量运算!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7646624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档