问题标签 [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.

0 投票
3 回答
2651 浏览

haskell - 在 Haskell 中“重用”参数的技巧?

有时我会偶然发现我想表达“请使用最后一个参数两次”的问题,例如为了编写无点样式或避免使用 lambda。例如

可以写成

或者考虑这个稍微复杂一点的函数(取自这个问题):

如果有这样的函数,我可以无点编写这段代码:

但是因为我在 Hoogle 中找不到类似 doubleArgs 或 dup 的东西,所以我想我可能会在这里错过一个技巧或成语。

0 投票
2 回答
440 浏览

scala - 从更大的矩阵中找到唯一的矩阵

我是函数式编程的新手,所以我正在做一些练习。我想写一个函数,给定一个独特的自然矩阵,比如说 5x5,返回一个较小尺寸的独特矩阵的集合,比如说 3x3,其中矩阵必须是完整的,即从原始中相邻的值创建。

简单的。只需 3 个一组一个接一个地滑过,然后向下滑动,得到如下所示的东西:

或者,在 Scala 中,

等等等等...

所以我尝试使用 Scala(我选择的语言,因为它允许我从命令式发展到函数式,而且我在过去的几年里一直在使用 Java。

现在我有一个可以使用的数据结构,但我没有看到一种功能性的方式。当然,我可以遍历每一块sliced,创建一个var matrix = new ListBuffer[Seq[Int]]()并强制创建一个包,然后我就完成了。

我想找到一种使用 Scala 的功能性、理想的无点方法,但我很难过。必须有一种方法可以使用 3 或类似的东西进行压缩……我搜索了 ScalaDocs,但似乎无法弄清楚。

0 投票
2 回答
1469 浏览

haskell - 什么时候使用无意义的风格?

许多 haskell 程序员,包括我在内,都喜欢无意义的风格,尤其是在编写复杂的解析器时。它们使代码更具可读性和更少冗长。但有时,情况正好相反(例如,在滥用Monad和朋友的实例时(->) a)。

请给我一些基本的指导,你认为无意义的风格什么时候有用,什么时候没有。例如,如果我必须使用部分合成来代替(类似于flip ((.) . take) . drop),我总是使用 lambda。

0 投票
2 回答
3854 浏览

haskell - 如何使用 (->) Monad 实例以及对 (->) 的混淆

在不同的问题上,我在评论中发现了有关使用(->)Monads 实例的提示,例如实现无点样式。

对我来说,这有点太抽象了。好的,我已经看到了 Arrow 实例,在(->)我看来,它(->)可以用在实例表示法中,但不能用在类型声明中(这对于另一个问题来说是单独的东西)。

有没有人使用(->)Monad 的例子?还是一个好的链接?

抱歉,如果这个问题可能已经在这里讨论过,但是搜索(->)Monad instance”会给你带来很多你可以想象的命中率......因为几乎每个关于 Haskell 某处的问题都涉及(->)或“Monad”。

0 投票
4 回答
5493 浏览

f# - 函数式编程中“无点”风格的优缺点是什么?

我知道在某些语言(Haskell?)中,努力是实现无点风格,或者从不通过名称显式引用函数参数。这对我来说是一个很难掌握的概念,但它可能有助于我理解这种风格的优点(甚至可能是缺点)是什么。谁能解释一下?

0 投票
7 回答
65291 浏览

haskell - 在 Haskell 中为布尔函数执行“和”和“或”

我只是写了以下两个函数:

它们可用于组合两个布尔函数的值,例如:

在看了这两个函数之后,我意识到它们非常有用。如此之多,以至于我现在怀疑它们要么包含在标准库中,要么更有可能是使用现有函数进行此操作的干净方法。

这样做的“正确”方法是什么?

0 投票
6 回答
12141 浏览

haskell - (c→d) → (a→b→c) → (a→b→d) 类型的 Haskell 函数组合算子

普通函数组合的类型

我认为这应该概括为以下类型:

一个具体的例子:计算差异平方。我们可以写diffsq a b = (a - b) ^ 2,但感觉我应该能够作曲(-)(^2)写出类似的东西diffsq = (^2) . (-)

我当然不能。我可以做的一件事是使用元组而不是两个参数来(-)转换它uncurry,但这是不一样的。

有可能做我想做的事吗?如果不是,我有什么误解让我认为它应该是可能的?


注意:这实际上已经在这里问过了,但没有给出答案(我怀疑必须存在)。

0 投票
2 回答
1167 浏览

haskell - 在 Haskell 中可以进行无点模式匹配吗?

给定

有没有可能add'em不用命名a和写b。就像是:

0 投票
2 回答
1293 浏览

haskell - 无点代码更有效,还是更简洁?

我编写了以下代码,它采用了一堆点并使用光泽库将它们绘制在屏幕上。

它工作得很好,但我突然想到有一个重复的模式:一系列函数调用,每个函数调用的结果都输入下一个参数的最后一个参数。因此,我通过删除中间变量、颠倒顺序并使用函数组合(“。”)链接函数进行重构,如下所示:

令人高兴的是,这也很好用。但我想知道我是否在强调可读性,或者我只是不习惯阅读和编写无点样式代码。另外,我如何推断这段代码?第二个版本更高效,还是更简洁?我可以在风格上做些什么来使它更清晰吗?

0 投票
4 回答
830 浏览

haskell - 使用带有 zipWithN 的运算符

说,我们可以这样写:

如果我们想要 tuple 3 列表,我们可以这样写: zipWith3 (,,) [1,2,3] [4,5,6] [7,8,9]

我们也可以使用 zipWith4 (,,,) zipWith5(,,,,)等等。

现在,我想做同样的事情,但使用添加而不是逗号运算符。有没有办法以同样简洁的方式定义它,而不是像 in 那样使用 lambdas

提前感谢您的任何回答。