sk-*_*sk- 1 haskell functional-programming
我是 Haskell 的新手,并试图了解如何编写函数,该函数将采用两个整数并生成该范围内所有整数的列表。
这是我到目前为止所拥有的,但没有运气。
rangeList :: Integer -> Integer -> [Integer]
rangeList n m
| n == m = []
| otherwise = n : n + (rangeList n (m-1))
Run Code Online (Sandbox Code Playgroud)
你想要实现的目标已经存在。如果两个界限都包含在内,则为:
rangeList :: Enum a => a -> a -> [a]
rangeList n m = [n .. m]
Run Code Online (Sandbox Code Playgroud)
或者如果上限是排他的,您可以使用pred :: Enum a => a -> a:
rangeListExcl :: Enum a => a -> a -> [a]
rangeListExcl n m = [n .. pred m]
Run Code Online (Sandbox Code Playgroud)
您自己的实现的主要问题是n + rangeList n (m-1)没有多大意义,因为rangeList n (m-1)will 是一个元素列表,并且n这里是 an Integer,所以您不能将它们添加在一起。即使您可以这样做,它仍然无法正常工作,因为 会在和 之间rangeList n (m-1)创建一个序列,通过添加到该结果,您会得到和之间的范围。递归应将上限增加 1,例如:nm-1n2*nn+m-1
rangeListExl :: (Ord a, Num a) => a -> a -> [a]
rangeListExcl n m
| n >= m = []
| otherwise = n : rangeListExcl (n+1) mRun Code Online (Sandbox Code Playgroud)