String 在Haskell中查找文本表中列的最长单词

String 在Haskell中查找文本表中列的最长单词,string,list,haskell,max,String,List,Haskell,Max,我有一个定义为字符串列表的文本表: type Field = String type Row = [Field] type Table = [Row] 我想创建一个函数,可以找到每列最长单词的宽度,如下所示: columnWidths :: Table -> [Int] ["asd", "ffdd"," 12345"] ["dd ss aa","123", "1dssd"] 如果有人输入这样的文本表: columnWidths :: Table -> [Int] ["as

我有一个定义为字符串列表的文本表:

type Field = String
type Row   = [Field]
type Table = [Row]
我想创建一个函数,可以找到每列最长单词的宽度,如下所示:

columnWidths :: Table -> [Int]
["asd", "ffdd"," 12345"]
["dd ss aa","123", "1dssd"]
如果有人输入这样的文本表:

columnWidths :: Table -> [Int]
["asd", "ffdd"," 12345"]
["dd ss aa","123", "1dssd"]
它应该返回宽度:
[8,4,5]

我尝试了一些方法,包括贴图、最大长度和转置,但我似乎无法使其工作。

所以我做了以下操作:

  • 使用
    map length
    查找表中每个文本项的长度,但我将其映射到整个表中,因此
    map(map length)
  • 我对它进行了转换,以便在每列中找到最大值
  • 将其映射到整个表:


  • 作为Arnon答案的变体,我们也可以先转置,然后映射:

    > map maximum . map (map length) . transpose $ table
    [8,4,5]
    
    通过利用
    map
    的函子定律,我们可以进一步简化上面的代码,它表示
    map f。地图g=地图(f.g)


    谢谢@chi。我试图保持它的简单,以显示逻辑步骤。