差异副产品

mar*_*rco 1 syntax haskell

我需要使用签名创建一个函数diffFolge :: (Integer, Integer) -> [Integer],当应用于参数pair (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 [] 
Run Code Online (Sandbox Code Playgroud)

input  : diffFolge (5,1)
output : [5,4,3,2,1,0]
Run Code Online (Sandbox Code Playgroud)

input  : diffFolge (5,2)
output :[5,3,1,-1]   ---> This is true by my code
Run Code Online (Sandbox Code Playgroud)

但是,使用第一个示例中给出的输入,我的函数返回[5,4,3,2,1,0,-1].我怎么能纠正这个?

ken*_*ytm 5

Haskell的[a..b]语法返回一个列表,包括 b如果可能的话.

你可以使用[m, m-n .. 1-n],这-n是被排除在外的.

(顺便说一下,n-2*n == -n)