Haskell 如何解决足够长的时间?。在哈斯克尔
Haskell 如何解决足够长的时间?。在哈斯克尔,haskell,Haskell,足够长的n xs:检查列表中的元素是否超过n 示例: 足够长2[1..5]==True 足够长的3[1,2,3]==False 足够长的0[]==False 足够长20[1..]==True 我猜这是家庭作业,您仍在学习基础知识,因此我将首先使用递归而不是foldr(如@dfeuer建议的那样)给您一些提示: 首先,注意一些明显的情况: 如果xs=[],则结果总是False(假设您不以某些奇怪的方式关心负值n) 如果n=0和xs为非空,则它始终为True 在所有其他情况下,你有 n>0 x
足够长的n xs
:检查列表中的元素是否超过n
示例:
足够长2[1..5]==True
足够长的3[1,2,3]==False
足够长的0[]==False
足够长20[1..]==True
foldr
(如@dfeuer建议的那样)给您一些提示:
首先,注意一些明显的情况:
- 如果
,则结果总是xs=[]
(假设您不以某些奇怪的方式关心负值False
)n
- 如果
和n=0
为非空,则它始终为xs
True
- 在所有其他情况下,你有
n>0
有多个元素xs
longEnough :: Int -> [a] -> Bool
longEnough _ [] = False
longEnough 0 _ = True
longEnough n (_:xs) = let n' = (n-1) in undefined
对于这些情况,如果仔细观察,您会发现我甚至在解决方案上添加了更多提示
附言
- 也许你想考虑一下消极的
,以及应该如何处理这些。。。我在这里没有n
- 如果您知道什么是
,那么您可能也应该尝试使用foldr
来实现这一点foldr
解决方案 似乎没有更多的反馈来自OP,所以我想我可以发布解决方案,就像我开始时一样:
longEnough :: Int -> [a] -> Bool
longEnough _ [] = False
longEnough 0 _ = True
longEnough n (_:xs) = longEnough (n-1) xs
(真的没有多少事可做了……)
以下是提到的测试用例:
λ> longEnough 2 [1..5]
True
λ> longEnough 3 [1,2,3]
False
λ> longEnough 0 []
False
λ> longEnough 20 [1..]
True
请参见使用
foldr
。折叠列表以生成一个具有所需严格下限长度的函数。您尝试了什么?所以这不是一个解决家庭作业的服务。在这类问题上,海报通常会显示一些努力。我建议在解释中使用=
,而不是=
,因为这可能不应该使用=
@dfeuer fair point来实现(事实上,我并不希望使用=
来实现,正如您可以从缺少的约束中看到的那样)如果这不是一个家庭作业问题,longtough n=not。无效的删除n
。