相关疑难解决方法(0)

对于部分应用的中缀运算符,名称"section"来自何处?

在Haskell中,我们使用术语"section"来表示在中缀位置使用的部分应用函数.例如,对于一个函数foo :: a -> b -> c和值x :: ay :: b,我们有两节

s1 = (x `foo`) :: b -> c == \b -> foo x b
Run Code Online (Sandbox Code Playgroud)

s2 = (`foo` y) :: a -> c == \a -> foo a y
Run Code Online (Sandbox Code Playgroud)

在类别理论,然而,一个段gf定义为一个右逆f(以便f . g == id).

我没有看到两个定义之间有明显的联系.例如,s1显然不是反向foo,至少不是在Hask中.我想s1甚至不必在Hask中反转.

类别理论定义是否是Haskell定义的来源,如果是,如何?

haskell category-theory

13
推荐指数
1
解决办法
272
查看次数

Haskell 中带有多个参数的部分应用程序

给定一些函数 f(x1,x2,x3,..,xN),在几个地方部分应用它通常很有用。例如,对于 N=3,我们可以定义 g(x)=f(1,x,3)。然而,Haskell 中的标准部分应用程序不是这样工作的,它只允许我们通过固定它的第一个参数来部分应用一个函数(因为所有函数实际上只接受一个参数)。有没有什么简单的方法可以做这样的事情:

g = f _ 2 _
g 1 3
Run Code Online (Sandbox Code Playgroud)

输出值f 1 2 3? 当然我们可以做一个 lambda 函数

g=(\x1 x3 -> f x1 2 x3)
Run Code Online (Sandbox Code Playgroud)

但我觉得这很不可读。例如,在 Mathematica 中,它是这样工作的,我觉得这很好:

g=f[#1,2,#2]&
g[1,3]
Run Code Online (Sandbox Code Playgroud)

与输出f[1,2,3]

编辑:也许我应该多谈谈动机。我想在点式组合中使用这种部分应用的函数,即在这样的表达式中:

h = g. f _ 2 . k
Run Code Online (Sandbox Code Playgroud)

得到h 3 = g(f(k(3),2))

haskell partial-application

6
推荐指数
1
解决办法
2296
查看次数

具有函数参数的函数是否可用?

/sf/answers/3991431881/

在哈斯克尔(Haskell),碰巧一切都是咖喱所有函数都只使用一个参数(甚至Haskell中未使用的函数也使用一个元组,严格来说,这是一个参数-您可能需要使用curry和uncurry函数来查看其工作原理)。

我不确定这是否是正确的,但可以这样假设。

如果一个函数采用另一个函数作为参数,它的咖喱化或不咖喱化与采用不带元组或列表参数的函数类似?(一对元组类型是type1 x type2并且可以是type1^2,而函数类型是type2^{type1},所以我发现它们相似)

如果是未咖喱的,如何将这样的功能转换为咖喱的功能?

haskell functional-programming currying

1
推荐指数
1
解决办法
149
查看次数