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

Fer*_*rry 3 text haskell cpu-word

我有一个问题是写一个函数来找到文本中最长的单词.

输入:包含大量单词的字符串.例如:"I am a young man, and I have a big house."

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

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

import Char
import List

maxord' (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
Run Code Online (Sandbox Code Playgroud)

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

有帮助吗?谢谢

fuz*_*fuz 13

尝试将您的任务分成几个子任务.我建议像这样拆分它:

  1. 将字符串转换为单词列表.例如,您的示例字符串变为

    ["I","am","a","young","man","and","I","have","a","big","house"]
    
    Run Code Online (Sandbox Code Playgroud)
  2. map length在列表上.这会计算单词长度.例如,步骤1中的列表变为

    [1,2,1,5,3,3,1,4,1,3,5]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 找到字符数最多的单词.你可以用maximum它.

您可以使用将(.)两个函数组合在一起的运算符来组合这些步骤.例如,如果调用执行步骤1的功能,则toWords可以在一行中执行整个任务:

maxord = maximum . map length . toWords
Run Code Online (Sandbox Code Playgroud)

实施toWords仍然是读者的练习.如果您需要帮助,请随时写评论.