什么((Ord,Ord) - > Bool) - > [String] - >字符串表示haskell

时间:2017-10-03 19:04:08

标签: haskell

我改变了这个问题,使其更加清晰。 shortestStringHelper具有类型(Int - > Int - > Bool) - > [String] - >串。请注意,字符串可能显示为[Char],具体取决于Haskell当时的感受。这个函数看起来很像shortestString和shortestString',但它更通用,因为它需要一个函数作为参数(Int - > Int - > Bool)。注意:根据您的编写方式,您可以获得(Int - > Int - > Bool) - > [[a]] - > [a],这也没关系。 我知道怎么写find找到最短的字符串

shortestString :: [String] -> String
shortestString  lst = if null lst then "" else foldl (\shortest x -> if length x < length shortest then x else shortest) (head lst) lst

shortestString' :: [String] -> String
shortestString'  lst = if null lst then "" else foldl (\shortest x -> if length x <= length shortest then x else shortest) (head lst) lst

他们工作,但我不确定我是否理解这个问题,而且我不知道((Ord, Ord) -> Bool)的意思。

1 个答案:

答案 0 :(得分:0)

Ord表示与Prelude中的内容不兼容的内容,但通常您提供的类型签名将是具有两个参数的函数。

第一个参数的类型为(Ord, Ord) -> Bool,该函数采用一对Ord并返回Bool。在上下文中,这可能是一个广义的比较函数,例如比较两个字符串的长度,表示为Ord在这里的任何内容。这是不寻常的,因为您会希望像isShorter :: String -> String -> BoolisShorter :: [a] -> [a] -> Bool那样写出类似的东西。

第二个参数的类型为[String],是String个对象的列表。该函数返回单个String

但是,您没有向我们提供足够的信息来了解此特定任务中发生的情况。

修改:您已更新了问题,以便第一个参数的类型为(Int, Int) -> Bool而不是(Ord, Ord) -> Bool,这更有意义。对于需要一个参数的高阶函数,这可能是对两个参数进行比较的方法,例如两个字符串的长度。