Haskell – 找到文本中最长的单词

Haskell – 找到文本中最长的单词,第1张

概述我有一个问题是写一个函数来找到文本中最长的单词. 输入:包含大量单词的字符串.例如:“我是一个年轻人,我有一个大房子.” 结果将是5,因为文本中最长的单词有5个字母(年轻和房子). 我刚刚开始学习Haskell.我试过了: import Charimport Listmaxord' (str:strs) m n = if isAlpha str == True then m 我有一个问题是写一个函数来找到文本中最长的单词.

输入:包含大量单词的字符串.例如:“我是一个年轻人,我有一个大房子.”

结果将是5,因为文本中最长的单词有5个字母(年轻和房子).

我刚刚开始学习Haskell.我试过了:

import Charimport Listmaxord' (str:strs) m n =     if isAlpha str == True    then maxord'(strs m+1 n)else    if m >= n        then maxord'(strs 0 m)    else    maxord'(strs 0 n)maxord (str:strs) = maxord' (str:strs) 0 0

我想返回n作为结果,但我不知道该怎么做,似乎代码也有问题.

有帮助吗?谢谢

解决方法 这里有几个问题.让我们从语法开始.

您的其他部分应缩进与它们所属的相同或更多,例如,如下所示:

if ...then ...else if ...     then ...     else ...

接下来,您的功能应用程序与许多其他语言不同,在Haskell中,括号仅用于分组和元组.由于函数应用程序在Haskell中如此常见,我们使用最轻量级的语法,即空格.因此,要将函数maxord’应用于参数strs,m 1和n,我们将写入maxord’strs(m 1)n.请注意,由于函数应用程序具有最高优先级,我们必须在m 1附近添加括号,否则它将被解释为(maxord’strs m)(1 n).

这就是语法.下一个问题是语义问题,即你有没有基本情况的递归.使用模式(str:strs),您已经指定了在剩下一些字符时要执行的 *** 作,但是当您到达字符串末尾时没有指定要执行的 *** 作.在这种情况下,我们想要返回n,所以我们为此添加一个案例.

maxord' [] m n = n

因此,固定的maxord’

maxord' [] m n = nmaxord' (str:strs) m n =     if isAlpha str == True    then maxord' strs (m+1) n    else if m >= n         then maxord' strs 0 m         else maxord' strs 0 n

但请注意,此解决方案并不是非常惯用.它使用显式递归,如果表达式而不是保护,将布尔值与True进行比较,并且具有非常迫切的感觉.一个更惯用的解决方案就是这样.

maxord = maximum . map length . words

这是一个简单的函数链,其中单词将输入分成单词列表,映射长度用其长度替换每个单词,最大值返回这些长度的最大值.

虽然,请注意它与您的代码不完全相同,因为在分割输入时,单词function使用稍微不同的标准.

总结

以上是内存溢出为你收集整理的Haskell – 找到文本中最长的单词全部内容,希望文章能够帮你解决Haskell – 找到文本中最长的单词所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存