Haskell 差异副产品
我需要用签名Haskell 差异副产品,haskell,syntax,Haskell,Syntax,我需要用签名diffFolge::(Integer,Integer)->[Integer]创建一个函数,当它应用于参数对(m,n)(m,n>0)时,返回一个数字降序列表,即两个数字之间的差值n。第一个元素是 结果列表为m,但最后一个元素始终大于0,最后一个元素 0或严格小于0的值 我写的如下: diffFolge :: (Integer,Integer) -> [Integer] diffFolge (m,n) = if m > 0 && n > 0 then
diffFolge::(Integer,Integer)->[Integer]
创建一个函数,当它应用于参数对(m,n)
(m,n>0
)时,返回一个数字降序列表,即两个数字之间的差值n
。第一个元素是
结果列表为m
,但最后一个元素始终大于0
,最后一个元素
0
或严格小于0
的值
我写的如下:
diffFolge :: (Integer,Integer) -> [Integer]
diffFolge (m,n) = if m > 0 && n > 0 then [m,m-n..n-2*n] else []
范例
input : diffFolge (5,1)
output : [5,4,3,2,1,0]
input : diffFolge (5,2)
output :[5,3,1,-1] ---> This is true by my code
范例
input : diffFolge (5,1)
output : [5,4,3,2,1,0]
input : diffFolge (5,2)
output :[5,3,1,-1] ---> This is true by my code
但是,对于第一个示例中给出的输入,我的函数返回
[5,4,3,2,1,0,-1]
。如何更正此问题?Haskell的[a..b]
语法返回一个包含b
的列表(如果可能)
您可以使用[m,m-n..1-n]
,以便排除-n
(顺便说一句,
n-2*n==-n
)Haskell的[a..b]
语法返回一个包含b
的列表(如果可能)
您可以使用[m,m-n..1-n]
,以便排除-n
(顺便说一句,
n-2*n==-n
)我不知道你想要什么,但我猜就是这样:
diffFolge (m,n) | m <= 0 = [m]
| otherwise = m : diffFolge (m-n,n)
diffFolge(m,n)| m我不知道你想要什么,但我猜就是这样:
diffFolge (m,n) | m <= 0 = [m]
| otherwise = m : diffFolge (m-n,n)
diffFolge(m,n)|m对我来说,您还断言m>=n
所以这里有一个简单的想法:
diffFolge :: (Integer, Integer) -> [Integer]
diffFolge (m,n)
| m <= 0 || n <= 0 = []
| n > m = diffFolge (n,m) -- | Only if you want this case
| otherwise = takeWhile (>= 0) $ iterate (\x->x-n) m
diffFolge::(整数,整数)->[整数]
diffFolge(m,n)
|m=0)$iterate(\x->x-n)m
对我来说,您还声明了m>=n
所以这里有一个简单的想法:
diffFolge :: (Integer, Integer) -> [Integer]
diffFolge (m,n)
| m <= 0 || n <= 0 = []
| n > m = diffFolge (n,m) -- | Only if you want this case
| otherwise = takeWhile (>= 0) $ iterate (\x->x-n) m
diffFolge::(整数,整数)->[整数]
diffFolge(m,n)
|m=0)$iterate(\x->x-n)m
有时候,做一点数学是值得的。:)
此外,在Haskell中,对函数的多个参数使用元组也是不常见的。我更有可能写作
df m n = [m, m-n .. 1-n]
然后,如果出于某种原因我真的需要一个取元组的函数,我会写:
diffFolge = uncurry df
有时候,只做一点点数学是值得的
此外,在Haskell中,对函数的多个参数使用元组也是不常见的。我更有可能写作
df m n = [m, m-n .. 1-n]
然后,如果出于某种原因我真的需要一个取元组的函数,我会写:
diffFolge = uncurry df
这是真的,但举例来说,当我给这个例子diffFolge(5,2)output muss so[5,3,1,-1]这是真的,但举例来说,当我给这个例子diffFolge(5,2)output muss so[5,3,1,-1]啊,我错过了KennyTM已经指出这一点的答案。啊,我错过了KennyTM已经指出这一点的答案。