如何解决longEnough?在哈斯克尔

时间:2015-11-01 18:37:55

标签: haskell

// file contain db $Mysqli = new mysqli('../MyFolder/MyDb.sql', 'User', 'Pass'); $Mysqli -> query("SELECT * FROM Table"); // file contain table $Mysqli = new mysqli('../MyFolder/MyTable.sql', 'User', 'Pass'); $Mysqli -> query("SELECT * FROM Table"); :检查列表是否包含longEnough n xs个元素。

示例:

  • n
  • longEnough 2 [1..5] == True
  • longEnough 3 [1,2,3] == False
  • longEnough 0 [] == False

1 个答案:

答案 0 :(得分:1)

我想这是功课,你仍然在学习基础知识,所以我首先会给你一些使用递归而不是foldr的提示(如@dfeuer建议的那样):

首先注意一些明显的案例:

  • 如果xs = []则结果始终为False(假设您不以某种奇怪的方式关注否定n
  • 如果n = 0xs非空,那么它总是True
  • 在你拥有的所有其他情况下
    • n > 0
    • xs有多个元素

也许你有一些递归的想法可以打破最后一个案例?

这是一个骨架:

longEnough :: Int -> [a] -> Bool
longEnough _ []     = False
longEnough 0 _      = True
longEnough n (_:xs) = let n' = (n-1) in undefined

对于这些情况 - 如果你仔细观察,你会发现我甚至在解决方案上添加了更多提示。

PS

  • 也许你想要考虑否定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