【问题标题】:Point Free with lists in Haskell在 Haskell 中使用列表免费点
【发布时间】:2015-10-26 17:07:23
【问题描述】:

所以我在这里看到了无积分转换的算法Point Free problems in Haskell 但是如果我要删除的点隐藏在列表中怎么办?比如下面这样一行?

AllNsTill n x = [n,2*n..x]

【问题讨论】:

  • 我想指出,尽管列表已经定义了足够多的函数,您可能可以无点使用列表,但对于一般数据类型,没有办法转换任意模式匹配成无点形式,无需为此目的首先定义新函数。

标签: algorithm haskell lambda functional-programming pointfree


【解决方案1】:

那个sequence syntax desugarsenumFromThenTo function打电话:

allNsTill n x = [n,2*n..x]
-->
allNsTill n x = enumFromThenTo n (2*n) x

现在您可以将其转换为无点语法(如果您真的想要的话)。我会争辩说它真的难以阅读:

allNsTill = (*2) >>= flip enumFromThenTo

【讨论】:

  • 跟进:列表理解可以重写为mapfilter
  • @Bakuriu,你不是说concatMap吗?
  • @dfeuer: 取决于你使用什么理解:-) 当然mapfilter 都可以使用concatMap 来实现。
  • @Bergi 啊,我明白了。好的。是的,不,我不想将其更改为免费,但很好奇它是如何完成的。非常感激。谢谢!
  • @Tshimanga:也许allNsTill n = enumFromThenTo n (2*n) 是一个合理的妥协
猜你喜欢
  • 1970-01-01
  • 2016-12-02
  • 2010-10-25
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多