【问题标题】:Haskell: Is there an idiomatic way to insert every item in a list into its own list?Haskell:有没有一种惯用的方式将列表中的每个项目插入到它自己的列表中?
【发布时间】:2013-07-03 22:17:01
【问题描述】:

我一直在使用((:[]) <$> xs),但如果有更清晰的方法,我很乐意使用它。

编辑:这么多好答案,伙计们!我不认为我可以接受,因为它们都很好。

【问题讨论】:

    标签: list haskell idioms


    【解决方案1】:

    诙谐的版本:

    import Data.List
    
    groupBy (const . const False) xs
    

    【讨论】:

      【解决方案2】:

      使用do 表示法:

      do { x <- xs; return [x] }
      

      【讨论】:

        【解决方案3】:

        您也可以使用列表推导:

        [ [x] | x <- theList]
        

        对于这样一个简单的示例来说可能有点矫枉过正,但根据您的上下文,也许您可​​以将此步骤与对单例列表的进一步处理合并:

        [f [x] + 13 | x <- theList]
        

        【讨论】:

          【解决方案4】:

          split 包提供了一个 (Data.List.Split.)chunksOf 函数,其名称为 IMO,比各种地图解决方案更有意义(即使它们更惯用。)

          【讨论】:

            【解决方案5】:

            我相信map returnmap pure 已经足够好了。

            【讨论】:

            • 我认为(:[]) 比 return & less characters 更清晰
            • @jozefg pure 更短。
            • pure 非常清晰、简洁,导入Applicative 几乎不是问题,不是吗?
            • (:[]) 被俗称为“机器人猴子操作员”,仅因为这个原因而美丽。
            • 如果您使用的是&lt;$&gt;,那么您已经在导入Applicative
            【解决方案6】:

            也许是这个?

            map (\x -> [x]) xs
            

            你的可以在任何我认为的函子上工作,所以这对于列表来说会更符合规范。

            【讨论】:

              猜你喜欢
              • 2022-01-05
              • 2010-09-17
              • 2011-08-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-10
              • 2021-12-22
              • 1970-01-01
              相关资源
              最近更新 更多