我正在处理一项针对家庭作业问题的函数,该函数计算列表中值大于v1
但小于v2
的值的数量。我整理了一些可行的方法,但仅在特定情况下适用。当我尝试其他事情时,我得到了错误
***例外:函数countInRange中的非穷举模式
该函数应该在getInRange
上调用。 getInRange
仅从列表中返回大于v1
且小于v2
的值。这就是它的样子。
rangeHelper v1 v2 x | x > v1 && x < v2 = True
| otherwise = False
getInRange :: Ord a => a -> a -> [a] -> [a]
getInRange v1 v2 iL = filter(rangeHelper v1 v2) iL
count iL = sum (map (const 1) iL)
countInRange :: Ord a => a -> a -> [[a]] -> Int
countInRange v1 v2 [iL] = count ((getInRange v1 v2) iL)
如果我要致电
countInRange 3 10 [[4,5,6]] -- works, prints 3
countInRange 3 10 [[1,2], [4,5,6]] -- error: non exhaustive patterns
答案 0 :(得分:3)
如果我们要简化您的功能甚至只是
countInRange v1 v2 [ iL ] = 0
我们仍然会观察到相同的行为:
countInRange 3 10 [ [4,5,6] ] -- returns 0
countInRange 3 10 [ [1,2], [4,5,6] ] -- ***Error: Non-exhaustive patterns
在这里看到问题了吗?
答案 1 :(得分:2)
您的new_df = pd.merge(cpu, it['product_name', 'url'], on='', how='left')
函数仅需要一个包含一个列表的列表。当您编写countInRange
时,仅当列表包含名为countInRange v1 v2 [iL]
的单个元素时,才将其定义为与模式匹配。您也可以使用iL
您可以通过如下定义解决此问题:
count = length