问题标签 [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 投票
1 回答
833 浏览

haskell - 帮助理解无点代码

在玩Pointfree时,我看到了一段我似乎无法理解的代码。

我的主要问题是我不明白join这里的工作方式。我知道它“删除”了一层单子包装(m (m a)to m a)。我认为它归结为类似的东西[1..10] >>= (\x -> [x * x]),但我真的不明白“额外层”是如何引入的。我明白了join x = x >>= id,但是我仍然坚持如何“复制”每个值以便(*)获得两个参数。这已经困扰了我大约半个小时了,我主要是对自己感到恼火,因为我觉得我拥有所有的拼图,但似乎无法将它们组合在一起......

PS 别担心,我不会真正使用这个无点版本,这纯粹是出于好奇,也是为了更好地理解 Haskell。

0 投票
4 回答
3052 浏览

scala - Scala 中无点样式的案例

这对于这里的 FP 行家来说似乎真的很明显,但是 Scala 中的无点风格有什么好处呢?在这个主题上真正卖给我的是一个插图,它显示了无点风格在某些方面(例如性能、优雅、可扩展性、可维护性)比用非无点风格解决相同问题的代码要好得多。

0 投票
3 回答
559 浏览

haskell - Haskell中函数组合的困惑

考虑以下 ghci 中的函数定义。

在哪里, 。代表两个函数的组合(右结合)。这个我可以打电话

它给了我想要的结果。显然,它将列表 [3.14, 3.14] 传递给函数“sum”,并将其“结果”传递给 cos 等等。但是,如果我在口译员中这样做

或者

然后我遇到了麻烦。将其修改为以下内容给了我想要的结果。

或者

(.) 的类型表明以下形式不应该有问题,因为 'sum y' 也是一个函数(不是吗?毕竟在 Haskell 中一切都是函数?)

更有趣的是,我可以使用两个(或多个)参数(考虑将列表 [3.14, 3.14] 作为两个参数 x 和 y 传递),我必须编写以下内容

HaskellWiki 上有一些关于这种形式的讨论,他们称之为“PointFree”形式http://www.haskell.org/haskellwiki/Pointfree。通过阅读这篇文章,我怀疑这种形式不同于两个 lambda 表达式的组合。当我尝试画一条分隔这两种样式的线时,我感到困惑。

0 投票
6 回答
586 浏览

f# - 在函数式编程中以无点风格定义函数。有什么缺点/优点?

每次我写一些形式的东西

我最终问自己我是否会写得更好

反而。与第二种形式相比,以第一种形式编写它有什么优势吗?

另外,您将如何调用第一种形式和第二种形式的函数定义?

0 投票
2 回答
247 浏览

haskell - 如何使交互无点?

在上面的代码中,我如何以无点样式编写交互函数。

0 投票
5 回答
340 浏览

haskell - 将两个一元值成对并返回

我正在玩 Parsec,我想将两个解析器组合成一个,并将结果放在一对中,然后将另一个函数提供给它以对解析结果进行操作以编写如下内容:

所以我写了这个:

有没有类似于 (<&>) 的东西已经在某处实现了?或者这可以写成无意义的吗?我试过fmap (,)了,但似乎很难匹配类型。

0 投票
3 回答
204 浏览

debugging - 为什么不进行类型检查?

compress xs@(_:_:_) = (ifte <$> ((==) <$> head <*> head.tail) <$> ((compress.).(:) <$> head <*> tail.tail) <*> ((:) <$> head <*> compress.tail) ) xs

导致类型错误,但我不明白为什么。它应该相当于

compress xs@(_:_:_) = (ifte (((==) <$> head <*> head.tail) xs) (((compress.).(:) <$> head <*> tail.tail) xs) (((:) <$> head <*> compress.tail) xs))

,这不是。

注意ifte = (\ x y z -> if x then y else z)<$><*>来自Control.Applicative

编辑:错误是:

我在尝试编写九十九个 Haskell 问题的第 8 题的无点解决方案时遇到了这个问题。我试图通过修改我写的有意义的解决方案来做到这一点,这是

0 投票
5 回答
698 浏览

haskell - 无点样式并使用 $

如何结合 using$和 point-free 风格?

一个明显的例子是以下效用函数:

只写concat $ replicate会产生错误,同样你也不能写concat . replicate,因为concat需要一个值而不是函数。

那么如何将上述函数变成无点样式呢?

0 投票
4 回答
4491 浏览

haskell - 无点风格的简单 Haskell 函数

我试图了解如何在 Haskell 中将函数转换为无点表示法。我看到了这个例子,但它比我要找的更复杂。我觉得我理解它背后的逻辑,但是当我尝试在代码中执行一些简单的示例时,我遇到了编译错误。我想尝试以无点风格编写此函数:

f x = 5 + 8/x我重新排列为f x = (+) 5 $ (/) 8 x

所以,我认为它可能是这样的:

但是当我在 ghci 中运行它时,我会收到以下消息:

我不明白“没有实例...”消息。我需要做什么才能以无点样式编写此函数?

0 投票
3 回答
1276 浏览

haskell - Haskell中无点样式的元素数量

我想定义一个函数来计算列表中满足给定谓词的元素数量:

例如:

应该返回2

我们可以写得更短:

没有f参数可以写吗?