Haskell数组减法



我正在努力复习我的线性代数技能,我也在学习Haskell和思想……为什么不通过做一件事来学习呢?(二鸟一石)

-- Vector
a = [1,0,0]
b = [2,0,4]
subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys)

我真正想了解的是:

  • (x:xs)(y:ys):这仅仅意味着a中的所有元素和b中的所有元素?

  • = (x-y):应计算a[0] - b[0] = c[0],对吗?

这段代码有问题:

subTwoLists :: Num a => [a] -> [a] -> [a]
subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys)

您没有处理基本情况。在递归中,你必须这样做处理基本情况。像这样的代码应该可以工作:

subTwoLists :: Num a => [a] -> [a] -> [a]
subTwoLists [] _ = []
subTwoLists _ [] = []
subTwoLists (x:xs) (y:ys) = (x-y) : (subTwoLists xs ys)

是否表示对a中的所有元素和b中的所有元素都适用?

是的。但是你为什么不自己试试呢?

(x-y): a[0] - b[0] = c[0]对吗?

是的。

另外,请注意您使用的是Lists,而不是数组。

最新更新