Haskell将2个lambda表达式应用于元组列表

 _我是谁谁谁__950 发布于 2023-02-13 16:19
  • php
  • 我正在努力理解Haskell中的lambda表达式.

    这是问题所在:

    我有一个元组列表[(a,b),(c,d),(e,f)...](可以是任意长度)

    我想将两个函数f1和f2应用于列表中的每个元组,但是这样的方式是f1应用于第一个元素,f2应用于每个元组的第二个元素.

    所以,例如,如果我有,[(a,b),(c,d)]我想应用f1和f2最终得到这样的东西:[((f1(a),f2(b)),(f1(c),f2(d))].

    我想我可以使用map和lambda表达式但最终会出现类型错误.

    是否有可能做我正在尝试使用lambda表达式和map函数?

    2 个回答
    • 是的:

      map (\(x,y) -> (f1 x, f2 y)) list
      

      在lambda exssion中箭头的左侧,我们有一个(x,y)匹配列表中元组的模式.在右侧,我们编写(f1 x, f2 y)以创建一个新的tupel,其中第一个值f1应用于x第二个值并f2应用第二个值y.

      2023-02-13 16:22 回答
    • 另一种解决方案就是

      map (f1 *** f2) list
      

      这是使用Control.Arrow提供(***)操作员的事实,这说明了这一点

      f *** g = \(x, y) -> (f x, g y)
      

      2023-02-13 16:22 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有