【发布时间】:2014-08-02 13:56:22
【问题描述】:
完整的练习题是:
使用匿名函数和映射函数,定义 Haskell 返回字符串列表中最长字符串的函数,例如 对于 [“qw”, “asd”,”fghj”, “kl”] 函数应该返回“fghj”。
我尝试这样做并不断失败并转移到其他人身上,但我真的很想知道如何解决这个问题。我似乎必须使用映射函数和匿名函数,但我不知道如何编写代码来使每个元素检查每个元素以找到最高的元素。
我知道使用像“foldr”这样的映射函数可以让你对每个元素执行重复操作并返回一个结果,这就是我们想要对这个问题做的事情(检查字符串列表中的每个字符串是否最长,然后返回一个字符串)。
但是对于 foldr,我不知道如何使用它在元素之间进行检查以查看哪个“最长”...任何帮助将不胜感激。
到目前为止,我一直在测试是否可以使用foldr 来测试每个元素的长度,但它甚至不起作用:
longstr :: [String] -> String
longstr lis = foldr (\n -> length n > 3) 0 lis
我对 Haskell 很陌生,因为这是一个为期 3 个月的课程,而且只有 1 个月,我们即将举行一场小型考试
【问题讨论】:
-
我不确定是否将折叠称为映射函数。然而,由于折叠函数有两个参数 - 当前元素和累加器 - 使用折叠的一种方法可能是将迄今为止最长的元素分配给累加器。
标签: string haskell mapping fold