【发布时间】:2012-04-11 17:29:36
【问题描述】:
任务:我正在尝试编写一个类型签名为 minimum_recursive :: (a -> a -> Bool) -> [a] -> a 的函数。对于它的第一个参数,它接受一个我将调用less 的函数,该函数接受两个参数,如果第一个参数小于第二个参数,则返回 True,否则返回 False。 minimum_recursive 也接受一个列表作为它的第二个参数。使用显式递归,minimum_recursive 应该确定其输入列表 [a] 中的最小值。
我的想法:我想把实际的递归放在一个也接受累加器的辅助函数中。我会以第一项作为累加器来调用辅助函数。
到目前为止我有什么:到目前为止我有以下几点:
-- function as first parameter to min'
-- accepts two params, returns True if
-- first must come before second in sorted
-- order
less :: Ord a => a -> a -> Bool
less a b = a < b
-- Subpart B
minimum_recursive :: (a -> a -> Bool) -> [a] -> a
minimum_recursive func list = minimum_recursive_h func list []
我遇到了麻烦,甚至不知道如何开始写minimum_recursive_h。
注意:我知道可能有更简单的方法来完成这项任务,但我必须按照上面的说明去做。
【问题讨论】:
-
如果这是一个家庭作业问题,你应该这样标记它。无论如何,这里有一个指针:基本情况很简单,现在假设您已经有一个函数可以找到长度列表中的最小元素
n - 1,您将如何将它与当前元素结合以获得长度列表的答案n? -
我想我会找到长度为
n - 1的列表的最小元素,然后将其与原始列表的元素n进行比较?我不知道 Haskell 的语法。我会做一些研究。 -
另请参阅标准库中minimumBy 的来源。