Haskell Is there a function for creating every variation of applying a function to a list

互联网 更新时间:2023-04-26 21:00:22

Jos*_*ica 7

要查看是否存在预先存在的函数,首先要弄清楚它的类型。在这种情况下,它是(a -> a) -> [a] -> [[a]]. 在 Hoogle 上搜索该类型只会返回少数匹配项,并且通过检查,它们都不会满足您的要求。

要自己编写它,请注意它对列表进行操作,弄清楚如何在列表上编写函数的最佳方法是归纳定义它。这意味着您需要构建两种情况:一种用于空列表,另一种用于假设您已经知道其尾部答案的非空列表:

applyVar f [] = _
applyVar f (x:xs) = _ -- use `applyVar f xs` somehow

现在我们只需要填写两个空格。对于 nil 情况,这很容易。对于 cons 的情况,请注意第一个子列表以 开头f a,其余的都以 开头a。然后,请注意其余的尾巴看起来非常像尾巴的答案。从那里,模式应该变得清晰。

applyVar f [] = []
applyVar f (x:xs) = (f x:xs):map (x:) (applyVar f xs)

这是它的快速演示/测试:

Prelude> applyVar (+10) [1,2,3]
[[11,2,3],[1,12,3],[1,2,13]]

非常感谢您的帮助,不仅提供解决方案,还提供解决此类问题的建议。 (2认同)

更多推荐

creating,function,Haskell,list,applying

本文发布于:2023-04-26 21:00:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/c74531be7bd1bf73d3291d25497b2eb6.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:creating   function   Haskell   list   applying

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 89739文章数
  • 23100阅读数
  • 0评论数