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

Haskell中实现Vector3列表按索引求和函数的问题

解决方案

首先我们明确核心逻辑:对列表中的Vector3逐个取对应分量相加,空列表返回零向量(求和的单位元)。以下是几种实现方式:

方式1:递归实现(带辅助函数)

先定义辅助函数处理两个向量的分量相加:

addVectors :: Vector3 -> Vector3 -> Vector3
addVectors (V x1 y1 z1) (V x2 y2 z2) = V (x1 + x2) (y1 + y2) (z1 + z2)

再通过递归实现列表求和:

vectorListSum :: [Vector3] -> Vector3
vectorListSum [] = V 0 0 0  -- 空列表返回零向量
vectorListSum (v:vs) = addVectors v (vectorListSum vs)  -- 当前向量 + 剩余列表的求和结果

方式2:递归实现(无辅助函数)

如果不想单独写辅助函数,可直接在递归过程中拆包处理分量:

vectorListSum :: [Vector3] -> Vector3
vectorListSum [] = V 0 0 0
vectorListSum ((V x y z):vs) = 
    let V xs ys zs = vectorListSum vs
    in V (x + xs) (y + ys) (z + zs)

方式3:用foldr简化实现

Haskell的折叠函数foldr可以更简洁地完成累加操作,逻辑和递归一致:

vectorListSum :: [Vector3] -> Vector3
vectorListSum = foldr (\(V x y z) (V xs ys zs) -> V (x+xs) (y+ys) (z+zs)) (V 0 0 0)

结合之前的addVectors函数,代码可读性更强:

vectorListSum :: [Vector3] -> Vector3
vectorListSum = foldr addVectors (V 0 0 0)

验证示例

调用vectorListSum [V 1 2 3, V 4 5 6, V 7 8 9]会得到V 12 15 18,符合对应分量相加的预期。

内容的提问来源于stack exchange,提问作者Tamás Veszelyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:45