如何让我编写的Haskell向量求和代码通过全部测试用例
问题原因
你当前的代码仅对长度为0、1、2的向量列表做了模式匹配,当输入列表长度≥3时,没有匹配的分支,自然无法通过全量测试。
调整方案
你可以通过递归或者折叠函数处理任意长度的向量列表,示例代码如下:
data Vector = V Int Int Int deriving (Show, Eq) -- 新增Eq实例方便测试判等,Show实例方便打印结果 -- 先封装两个向量相加的基础逻辑,复用避免重复代码 addVector :: Vector -> Vector -> Vector addVector (V x1 x2 x3) (V y1 y2 y3) = V (x1 + y1) (x2 + y2) (x3 + y3) -- 用foldl折叠整个列表,初始值为零向量,支持任意长度的向量列表求和 vector :: [Vector] -> Vector vector = foldl addVector (V 0 0 0)
如果你想要自己写递归实现,也可以替换为下面的写法:
vector :: [Vector] -> Vector vector [] = V 0 0 0 vector (v:vs) = addVector v (vector vs)
验证示例
你可以用下面的用例测试调整后的代码:
- 空列表输入:
vector []输出V 0 0 0 - 三个向量输入:
vector [V 1 2 3, V 4 5 6, V 7 8 9]输出V 12 15 18
内容的提问来源于stack exchange,提问作者trolli19
相关产品推荐
相关产品推荐

