问题标签 [pointfree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 在 Haskell 中“重用”参数的技巧?
有时我会偶然发现我想表达“请使用最后一个参数两次”的问题,例如为了编写无点样式或避免使用 lambda。例如
可以写成
或者考虑这个稍微复杂一点的函数(取自这个问题):
如果有这样的函数,我可以无点编写这段代码:
但是因为我在 Hoogle 中找不到类似 doubleArgs 或 dup 的东西,所以我想我可能会在这里错过一个技巧或成语。
scala - 从更大的矩阵中找到唯一的矩阵
我是函数式编程的新手,所以我正在做一些练习。我想写一个函数,给定一个独特的自然矩阵,比如说 5x5,返回一个较小尺寸的独特矩阵的集合,比如说 3x3,其中矩阵必须是完整的,即从原始中相邻的值创建。
简单的。只需 3 个一组一个接一个地滑过,然后向下滑动,得到如下所示的东西:
或者,在 Scala 中,
等等等等...
所以我尝试使用 Scala(我选择的语言,因为它允许我从命令式发展到函数式,而且我在过去的几年里一直在使用 Java。
现在我有一个可以使用的数据结构,但我没有看到一种功能性的方式。当然,我可以遍历每一块sliced
,创建一个var matrix = new ListBuffer[Seq[Int]]()
并强制创建一个包,然后我就完成了。
我想找到一种使用 Scala 的功能性、理想的无点方法,但我很难过。必须有一种方法可以使用 3 或类似的东西进行压缩……我搜索了 ScalaDocs,但似乎无法弄清楚。
haskell - 什么时候使用无意义的风格?
许多 haskell 程序员,包括我在内,都喜欢无意义的风格,尤其是在编写复杂的解析器时。它们使代码更具可读性和更少冗长。但有时,情况正好相反(例如,在滥用Monad
和朋友的实例时(->) a
)。
请给我一些基本的指导,你认为无意义的风格什么时候有用,什么时候没有。例如,如果我必须使用部分合成来代替(类似于flip ((.) . take) . drop
),我总是使用 lambda。
haskell - 如何使用 (->) Monad 实例以及对 (->) 的混淆
在不同的问题上,我在评论中发现了有关使用(->)
Monads 实例的提示,例如实现无点样式。
对我来说,这有点太抽象了。好的,我已经看到了 Arrow 实例,在(->)
我看来,它(->)
可以用在实例表示法中,但不能用在类型声明中(这对于另一个问题来说是单独的东西)。
有没有人使用(->)
Monad 的例子?还是一个好的链接?
抱歉,如果这个问题可能已经在这里讨论过,但是搜索“ (->)
Monad instance”会给你带来很多你可以想象的命中率......因为几乎每个关于 Haskell 某处的问题都涉及(->)
或“Monad”。
f# - 函数式编程中“无点”风格的优缺点是什么?
我知道在某些语言(Haskell?)中,努力是实现无点风格,或者从不通过名称显式引用函数参数。这对我来说是一个很难掌握的概念,但它可能有助于我理解这种风格的优点(甚至可能是缺点)是什么。谁能解释一下?
haskell - 在 Haskell 中为布尔函数执行“和”和“或”
我只是写了以下两个函数:
它们可用于组合两个布尔函数的值,例如:
在看了这两个函数之后,我意识到它们非常有用。如此之多,以至于我现在怀疑它们要么包含在标准库中,要么更有可能是使用现有函数进行此操作的干净方法。
这样做的“正确”方法是什么?
haskell - (c→d) → (a→b→c) → (a→b→d) 类型的 Haskell 函数组合算子
普通函数组合的类型
我认为这应该概括为以下类型:
一个具体的例子:计算差异平方。我们可以写diffsq a b = (a - b) ^ 2
,但感觉我应该能够作曲(-)
并(^2)
写出类似的东西diffsq = (^2) . (-)
。
我当然不能。我可以做的一件事是使用元组而不是两个参数来(-)
转换它uncurry
,但这是不一样的。
有可能做我想做的事吗?如果不是,我有什么误解让我认为它应该是可能的?
注意:这实际上已经在这里问过了,但没有给出答案(我怀疑必须存在)。
haskell - 在 Haskell 中可以进行无点模式匹配吗?
给定:
有没有可能add'em
不用命名a
和写b
。就像是:
haskell - 无点代码更有效,还是更简洁?
我编写了以下代码,它采用了一堆点并使用光泽库将它们绘制在屏幕上。
它工作得很好,但我突然想到有一个重复的模式:一系列函数调用,每个函数调用的结果都输入下一个参数的最后一个参数。因此,我通过删除中间变量、颠倒顺序并使用函数组合(“。”)链接函数进行重构,如下所示:
令人高兴的是,这也很好用。但我想知道我是否在强调可读性,或者我只是不习惯阅读和编写无点样式代码。另外,我如何推断这段代码?第二个版本更高效,还是更简洁?我可以在风格上做些什么来使它更清晰吗?
haskell - 使用带有 zipWithN 的运算符
说,我们可以这样写:
如果我们想要 tuple 3 列表,我们可以这样写: zipWith3 (,,) [1,2,3] [4,5,6] [7,8,9]
我们也可以使用 zipWith4 (,,,) zipWith5(,,,,)
等等。
现在,我想做同样的事情,但使用添加而不是逗号运算符。有没有办法以同样简洁的方式定义它,而不是像 in 那样使用 lambdas
提前感谢您的任何回答。