List 哈斯克尔数组减法

List 哈斯克尔数组减法,list,haskell,List,Haskell,我正在努力温习我的线性代数技能,同时也在学习Haskell和思想……为什么不通过一个接一个的学习呢!(两鸟一石) 我真正想了解的是: (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)

我正在努力温习我的线性代数技能,同时也在学习Haskell和思想……为什么不通过一个接一个的学习呢!(两鸟一石)

我真正想了解的是:

  • (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中的所有元素吗

对。但是你为什么不自己在ghci试一试呢

(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中的所有元素吗

对。但是你为什么不自己在ghci试一试呢

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


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

谢谢!这有什么作用subTwoLists::Num a=>[a]->[a]->[a]@Genesis这是一个类型签名,告诉函数
subTwoLists
接受两个列表作为输入,并给出一个列表作为输出。通常情况下,编写类型签名不是强制性的,但在阅读代码时会有很大帮助。[a]->[a]->[a]->[a]->[a]这会接受3个列表并输出一个列表吗?@Genesis:您不必自己编写函数-有一个很好的方法可以帮您完成这项工作::
subTwoLists=zipWith(-)
;)由于OP在线性代数中使用此函数,因此OP只调用具有相同长度列表的
子列表。如果列表的长度不相同,则
子列表
将自动截断较长的列表,使其均匀。如果这是不需要的,并且OP更喜欢运行时错误,那么可以返回
错误“不均匀列表”
而不是前两个等式中的
[]
。谢谢!这有什么作用subTwoLists::Num a=>[a]->[a]->[a]@Genesis这是一个类型签名,告诉函数
subTwoLists
接受两个列表作为输入,并给出一个列表作为输出。通常情况下,编写类型签名不是强制性的,但在阅读代码时会有很大帮助。[a]->[a]->[a]->[a]->[a]这会接受3个列表并输出一个列表吗?@Genesis:您不必自己编写函数-有一个很好的方法可以帮您完成这项工作::
subTwoLists=zipWith(-)
;)由于OP在线性代数中使用此函数,因此OP只调用具有相同长度列表的
子列表。如果列表的长度不相同,则
子列表
将自动截断较长的列表,使其均匀。如果这是不需要的,并且OP更喜欢运行时错误,那么可以在前两个等式中返回
错误“不均匀列表”
而不是
[]
。可怜的小鸟。。。不是素食主义者的职位…可怜的鸟。。。不是素食主义者的帖子。。。