问题标签 [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.
haskell - 带中缀函数的部分应用
虽然我对数学意义上的柯里化有点了解,但部分应用中缀函数是一个新概念,这是我在深入阅读《Learn You a Haskell for Great Good 》一书后发现的。
鉴于此功能:
作者以一种有趣的方式使用它:
在这里,我可以清楚地看到结果函数传递了不同的参数,考虑到它是一个柯里化函数,这不会以正常方式发生(会吗?)。那么,Haskell 对中缀切片有什么特殊处理吗?它对所有中缀函数都是通用的吗?
作为旁注,这是我学习 Haskell 和函数式编程的第一周,我仍在阅读这本书。
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?
haskell - 如何理解 Haskell 中的这种 `$` 用法
这发生在您想将一堆函数应用于同一个变量的情况下,它可能如下所示:
但是来自LYAH 的使用$
使它非常整洁
为什么它起作用。首先我在 ghci like 中输入它$ 4 odd
,它失败了,然后我输入($ 4) odd
它,它工作正常。然后我检查显示的($ 4)
使用类型,是。这似乎有道理,但对我来说仍然不清楚。:t
($ 4) :: Num a => (a -> b) -> b
odd
odd :: Integral a => a -> Bool
谁能解释清楚,它是另一种常见的用法吗?$
还有其他更多用法吗$
?
function - Haskell 中的函数应用
好的,这是漫长的一天,我的大脑可能无法在 Haskell 级别上运行,但我无法理解“Learn You a Haskell”中的一个例子。
该部分被称为带有 $ 的函数应用程序,并且有如何$
定义的示例:
到目前为止,一切都清楚了。我理解本节中的所有示例,除了最后一个:
在这里,我们($ 3)
跨函数列表进行映射,并将这些函数应用到3
. 但这怎么可能?
从第一个代码片段可以清楚地看出,第一个参数是一个函数,我们甚至可以这样写:
现在($ 3)
是函数的一个部分应用$
,而是3
在函数的位置上!那么3
应该是一个功能还是什么?
还有一个谜团:到底是(4+)
什么?我知道那(+4)
是函数的偏应用+
,那么(4+)
应该是函数的偏应用4
吗?废话。什么样的技巧在这里起作用?
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?
haskell - 部分是柯里化的结果吗?
哈顿在 Haskell 中编程
一般来说,如果
#
是一个操作符,那么形式为(#)
,(x #)
和(# y)
for 参数x
的 表达式y
称为节,其作为函数的含义可以使用 lambda 表达式形式化,如下所示:
“section”和“currying”有什么区别和关系?
部分是对多参数函数应用柯里化操作的结果吗?
谢谢。