在haskell中编写递归inRange函数
我得到了一个通过递归编写inRange函数的练习,即:用一个列表给出两个数字(表示范围),它应该返回一个新列表,其中包含这两个数字之间的所有数字,包括提供的两个范围数字 显然,基本情况之一应该是列表是否为空 在a b[]=[]范围内,但除此之外,我完全迷路了。我尝试过使用保护性语句,但是我还是很迷茫。这个怎么样在haskell中编写递归inRange函数,haskell,recursion,Haskell,Recursion,我得到了一个通过递归编写inRange函数的练习,即:用一个列表给出两个数字(表示范围),它应该返回一个新列表,其中包含这两个数字之间的所有数字,包括提供的两个范围数字 显然,基本情况之一应该是列表是否为空 在a b[]=[]范围内,但除此之外,我完全迷路了。我尝试过使用保护性语句,但是我还是很迷茫。这个怎么样 inRange :: Int -> Int -> [Int] inRange x y | x == y = [x] | x < y = x :
inRange :: Int -> Int -> [Int]
inRange x y | x == y = [x]
| x < y = x : inRange (x + 1) y
inRange::Int->Int->[Int]
在范围x y | x==y=[x]
|x
实际上,您不必将列表作为参数传递给此,因为递归通常由两部分组成:
- 一个或多个基本情况,例如空列表:
inRange _ _ [] = []
- 在一个或多个递归情况下(或归纳情况下)。显然,当列表不为空时就是这种情况
inRange a b (x:xs) | a <= x && x <= b = x : tl
| otherwise = tl
where tl = inRange a b xs
inRange a b(x:xs)| a我想你看错了问题规格:给你一个列表,如果我理解正确,你需要对它执行某种过滤操作。对不起,只要重新阅读你的帖子,你想输入一个列表,我会把答案留在这里以供参考,虽然这不是我的帖子,但无论如何;)。哈哈-我想我们基本上是同时评论的;)到目前为止你做了什么?谢谢,这个解决方案非常完美!谢谢你把一切都说清楚了。
inRange a b (x:xs) | a <= x && x <= b = x : tl
| otherwise = tl
where tl = inRange a b xs
inRange _ _ _ = []