List 哈斯克尔数组减法
我正在努力温习我的线性代数技能,同时也在学习Haskell和思想……为什么不通过一个接一个的学习呢!(两鸟一石) 我真正想了解的是: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)
和(x:xs)
:这些仅仅意味着a中的所有元素和b中的所有元素吗(y:ys)
:应该计算=(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更喜欢运行时错误,那么可以在前两个等式中返回错误“不均匀列表”
而不是[]
。可怜的小鸟。。。不是素食主义者的职位…可怜的鸟。。。不是素食主义者的帖子。。。