dar*_*ton 1 string mapping haskell fold
完整的练习考试题目是:
使用匿名函数和映射函数,定义Haskell函数,这些函数返回字符串列表中最长的字符串,例如对于["qw","asd","fghj","kl"],函数应返回"fghj".
我尝试这样做并继续失败并转向其他人,但我真的想知道如何解决这个问题.我似乎必须使用映射函数和匿名函数,但我不知道如何编写代码来使每个元素检查以找到最高的一个.
我知道使用像"foldr"这样的映射函数可以让你对每个元素执行重复操作并返回一个结果,这就是我们想要对这个问题做的事情(检查字符串列表中的每个字符串最长,然后返回一个串).
但是对于foldr,我不知道如何使用它来检查元素之间的检查,看哪个是"最长的"...任何帮助都将很乐意欣赏.
到目前为止,我一直在测试我是否甚至可以foldr用来测试每个元素的长度,但它甚至不起作用:
longstr :: [String] -> String
longstr lis = foldr (\n -> length n > 3) 0 lis
Run Code Online (Sandbox Code Playgroud)
我对haskell很新,因为这是一个3个月的课程而且只有1个月,我们有一个小的考试即将到来
我会说他们正在寻找一个简单的解决方案:
longstr xs = foldr (\x acc -> if length x > length acc then x else acc) "" xs
Run Code Online (Sandbox Code Playgroud)
foldr就像一个迭代列表的每个元素的循环xs.它接收2个参数:x元素和acc(对于累加器)在这种情况下是迄今为止最长的字符串.
在条件中,如果到目前为止最长的字符串比我们保留的元素长,否则我们改变它.