问题标签 [operator-sections]

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 回答
2537 浏览

haskell - 带中缀函数的部分应用

虽然我对数学意义上的柯里化有点了解,但部分应用中缀函数是一个新概念,这是我在深入阅读《Learn You a Haskell for Great Good 》一书后发现的。

鉴于此功能:

作者以一种有趣的方式使用它:

在这里,我可以清楚地看到结果函数传递了不同的参数,考虑到它是一个柯里化函数,这不会以正常方式发生(会吗?)。那么,Haskell 对中缀切片有什么特殊处理吗?它对所有中缀函数都是通用的吗?


作为旁注,这是我学习 Haskell 和函数式编程的第一周,我仍在阅读这本书。

0 投票
4 回答
2213 浏览

haskell - Haskell dollar operator application

I'm having trouble with understanding how function application works with currying in haskell. If I have following function:

I understand that to partially apply this function I need to provide (a -> b) function ($'s first argument).

Why then is it possible to apply a value first (i.e. reverse arguments)?

What am I missing here?

0 投票
3 回答
365 浏览

haskell - 如何理解 Haskell 中的这种 `$` 用法

这发生在您想将一堆函数应用于同一个变量的情况下,它可能如下所示:

但是来自LYAH 的使用$使它非常整洁

为什么它起作用。首先我在 ghci like 中输入它$ 4 odd,它失败了,然后我输入($ 4) odd它,它工作正常。然后我检查显示的($ 4)使用类型,是。这似乎有道理,但对我来说仍然不清楚。:t($ 4) :: Num a => (a -> b) -> boddodd :: Integral a => a -> Bool

谁能解释清楚,它是另一种常见的用法吗?$还有其他更多用法吗$

0 投票
3 回答
626 浏览

function - Haskell 中的函数应用

好的,这是漫长的一天,我的大脑可能无法在 Haskell 级别上运行,但我无法理解“Learn You a Haskell”中的一个例子。

该部分被称为带有 $ 的函数应用程序,并且有如何$定义的示例:

到目前为止,一切都清楚了。我理解本节中的所有示例,除了最后一个:

在这里,我们($ 3)跨函数列表进行映射,并将这些函数应用到3. 但这怎么可能?

从第一个代码片段可以清楚地看出,第一个参数是一个函数,我们甚至可以这样写:

现在($ 3)是函数的一个部分应用$,而是3在函数的位置上!那么3应该是一个功能还是什么?

还有一个谜团:到底是(4+)什么?我知道那(+4)是函数的偏应用+,那么(4+)应该是函数的偏应用4吗?废话。什么样的技巧在这里起作用?

0 投票
2 回答
823 浏览

haskell - 适用于 <$> 和 <*> 的运算符部分

考虑类型a -> b -> c的函数和应用值a1, a2 :: (Applicative f) => f a

我希望构造一个函数,该函数可应用于 type 函数a -> b -> c以获得 type 的值Applicative f :: f c。我可以通过以下方式做到这一点:

(显式 lambda 是经过深思熟虑的,因为我正在考虑在任何级别构建此函数,而不仅仅是顶层)。

如果我尝试以g无点风格写作:

我收到以下编译错误:

可以编写这个无点实现:

但我觉得这不太可读,重构基于函数的中缀实现更简单,例如,添加另一个参数,而不是将上面的内容更改为 use liftA3

一个人可以写出一系列的作品:

这实现了无点样式,并且添加参数很简单 - 但它们被添加到左侧而不是添加到右侧,因此您失去了与函数类型的对应关系(a -> b -> c)。此外,与在第一个实现中仅使用 lambda 相比,使用更多参数最终会得到更长的表达式。

那么,是否有很好、简洁的方式来编写我想要的部分,还是我坚持使用 lambda?

0 投票
3 回答
154 浏览

haskell - 部分是柯里化的结果吗?

哈顿在 Haskell 中编程

一般来说,如果 #是一个操作符,那么形式为 (#), (x #)(# y)for 参数 x的 表达式y 称为节,其作为函数的含义可以使用 lambda 表达式形式化,如下所示:

“section”和“currying”有什么区别和关系?

部分是对多参数函数应用柯里化操作的结果吗?

谢谢。