繁体   English   中英

如何让我的 Haskell 代码适用于所有测试?

[英]How can I make my haskell code work for all of the tests?

将向量放在一个列表中! 通过将相同的分量相加来将两个向量相加。

data Vector3 = V Int Int Int deriving (Show, Eq)
vectorListSum :: [Vector3] -> Vector3
vectorListSum [] = (V 0 0 0)
vectorListSum [V x1 x2 x3] = (V x1 x2 x3)
vectorListSum [V x1 x2 x3, V y1 y2 y3] = (V (x1 + y1) (x2 + y2) (x3 + y3))
Tests:
- vectorListSum [] == V 0 0 0
- vectorListSum [V 1 2 3] == V 1 2 3
- vectorListSum [V 1 1 1, V 0 0 0, V 2 2 3] == V 3 3 4
- vectorListSum [V 0 2 4, V (-10) 4 2, V 0 0 0] == V (-10) 6 6
- vectorListSum [V 0 0 0, V 0 0 0, V 0 0 0, V 0 0 0] == V 0 0 0
- vectorListSum [V i (i * i) (i * i * i) | i <- [0..10]] == V 55 385 3025

Haskell 不支持迭代,因此您需要知道如何使用基本递归或仅使用 foldl/foldr。

vectorListSum :: [Vector3] -> Vector3
vectorListSum = foldl1 (\(V x1 y1 z1) (V x2 y2 z2) -> V (x1 + x2) (y1 + y2) (z1 + z2))

每个haskell教程都会包含一个相同的例子,也许你应该仔细阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM