You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell向量运算技术问询:向量加法、点积及直角判断

Haskell 三维向量操作函数修正与实现

原代码的问题说明

  • 类型签名错误:原函数的类型签名未正确匹配三维向量结构,向量需用(a,a,a)表示,而非单个a
  • 语法/逻辑错误:
    • 向量加法的返回值未用逗号构造三元组,Haskell中必须通过逗号分隔元组元素
    • 点积逻辑错误,点积是各分量乘积的和,而非构造新元组

1. 正确的向量加法函数

向量加法需对两个三维向量的对应分量分别相加,返回新的三维向量:

addVectors :: (Num a) => (a, a, a) -> (a, a, a) -> (a, a, a)
addVectors (a1, a2, a3) (b1, b2, b3) = (a1 + b1, a2 + b2, a3 + b3)

类型签名(Num a) => (a,a,a) -> (a,a,a) -> (a,a,a)表示:接收两个同类型的三维数值向量,返回同类型的三维向量

2. 正确的点积(scalarProduct)函数

点积是对应分量乘积的总和,返回一个标量:

scalarProduct :: (Num a) => (a, a, a) -> (a, a, a) -> a
scalarProduct (a1, a2, a3) (b1, b2, b3) = a1 * b1 + a2 * b2 + a3 * b3

类型签名末尾的a表示返回值是单个数值(标量),符合点积的数学定义

3. 判断两向量夹角是否为直角的函数

两向量垂直(夹角为直角)当且仅当它们的点积为0,函数需同时约束Num(支持点积计算)和Eq(支持等于0的判断):

isRightAngle :: (Num a, Eq a) => (a, a, a) -> (a, a, a) -> Bool
isRightAngle v1 v2 = scalarProduct v1 v2 == 0

直接复用已实现的scalarProduct函数,判断结果是否等于0,返回布尔值表示是否垂直


内容的提问来源于stack exchange,提问作者iTzTomy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:20:21