List 如何使列表停止在某个值?

List 如何使列表停止在某个值?,list,haskell,recursion,List,Haskell,Recursion,我试图通过我给出的值来设置列表的范围。我能够排在榜首,写下剩下的部分。但是,我无法使列表在我在函数中输入的hi值处停止。如何使列表停止在该特定值处 我试着在我写的条件之间进行不同的组合。我尝试将x>hi=[]作为第一个条件,我认为一旦列表中的下一个元素大于hi,列表就会结束 inRangeRec :: Int -> Int -> [Int] -> [Int] inRangeRec lo hi [] = [] inRangeRec lo hi (x:xs) | lo <=

我试图通过我给出的值来设置列表的范围。我能够排在榜首,写下剩下的部分。但是,我无法使列表在我在函数中输入的hi值处停止。如何使列表停止在该特定值处

我试着在我写的条件之间进行不同的组合。我尝试将x>hi=[]作为第一个条件,我认为一旦列表中的下一个元素大于hi,列表就会结束

inRangeRec :: Int -> Int -> [Int] -> [Int]
inRangeRec lo hi [] = []
inRangeRec lo hi (x:xs) | lo <= x && x <= hi = lo : [ x | x <- xs]
                        | otherwise          = inRangeRec lo hi xs
                        | x > hi             = [] 
我希望在Rangerec 35[1..10]==[3,4,5]
但是我得到的输出是[3,4,5,6,7,8,9,10]

我想你想说的是让值x在范围内,如果不在范围内,则移除它,如果x大于max则停止,因此:

inRangeRec :: Int -> Int -> [Int] -> [Int]
inRangeRec lo hi [] = []
inRangeRec lo hi xss@(x:xs) | lo <= x && x <= hi = x : inRangeRec lo hi xs
                            | x > hi             = [] 
                            | otherwise          = inRangeRec lo hi xs

我想你想说的是让值x在范围内,如果不在范围内,则将其删除,如果x大于max,则停止,因此:

inRangeRec :: Int -> Int -> [Int] -> [Int]
inRangeRec lo hi [] = []
inRangeRec lo hi xss@(x:xs) | lo <= x && x <= hi = x : inRangeRec lo hi xs
                            | x > hi             = [] 
                            | otherwise          = inRangeRec lo hi xs
只要某个条件成立,我们就可以利用来获取元素

因此,我们可以在这里使用filter和takeWhile,如:

只要某个条件成立,我们就可以利用来获取元素

因此,我们可以在这里使用filter和takeWhile,如:

inRangeRec 3 5[10,5,1,3,9,4]应该返回什么?如果它是[]或[5,3,4]?[X] X,否则应该总是走到最后。如果是真的,那么InangeReC…;否则[]。否则,应该是什么?IrangeREC 3 5 [10,5,1,3,9,4]返回?它应该是[]还是[5,3,4]?[XX x,否则应该总是走到最后。如果是真的,那么InangeReC…;否则[]。否则,字面上等于真。
inRange :: Ord a => a -> a -> [a] -> [a]
inRange lo hi = dropWhile (< lo) . takeWhile (< hi)