【问题标题】:A functional programming language with a higher-order function similar to Haskell's flip but uncurried [closed]一种函数式编程语言,具有类似于 Haskell 的翻转但没有柯里化的高阶函数 [关闭]
【发布时间】:2018-12-03 18:50:57
【问题描述】:

是否有任何函数式编程语言的函数不会自动柯里化,它具有内置或库高阶函数,该函数采用 (AxB)->C 形式的函数并返回形式 ( BxA)->C?这类似于 Haskell 的翻转功能。

【问题讨论】:

  • 这样的问题是off-topic on SO。请考虑在r/programming 那里询问。
  • @kostix:我会在 r/programming 提问,但我看不出我的问题有什么离题的地方。你能告诉我,这样我以后会避免问离题的问题吗?
  • 第 4 点在标题为“一些问题仍然离题,即使它们属于上面列出的类别之一:”在那个“什么是主题”文档中。也可能是第 5 点。一般的想法是 SO 是针对范围狭窄的技术问题。他们可能会使用与软件开发相关的编程语言或工具,但他们仍然必须缩小范围并切中要害。

标签: functional-programming programming-languages


【解决方案1】:

你不需要柯里化来实现flip。这是 Scala 中的一个实现:

def flip[A,B,C](f: (A, B) => C): (B, A) => C = (b: B, a: A) => f(a, b)

它是否“内置”是另一个问题。在函数式编程中不那么重要。如果不使用柯里化,它也没有那么有用,因为通常你想使用flip 来使合成工作。

【讨论】:

  • 谢谢。然而,问题的关键在于找到这样一个运算符的内置或标准库实现,因为我正在为这个运算符寻找一个 标准名称。我不想为这个运算符起一个名字,如果一个已经被普遍使用的话。
  • @EvanAad “翻转”有什么问题? flip(f)(y,x) = f(x,y)。语言是非柯里化的,参数仍然是翻转的。
  • @WillNess:我想区分 curried 和 uncurried 翻转函数。
  • @EvanAad 所以它是 uncurried 的功能,而不是语言?那就更简单了:答案是 Haskell 的 uncurry flip
  • @WillNess:我更喜欢“交换”和“翻转”。
【解决方案2】:

在第 26 页的 1.4 中的 "Homotopy Type Theory" 中,柯里化版本的函数称为 “swap”

swap: Π(A:U)Π(B:U)Π(C:U) (A -> B -> C) -> (B -> A -> C)

swap(A, B, C, g)(b, a) := λb.λa.g(a)(b)

我不知道你为什么要为非咖喱版本有一个单独的名称,反正有什么区别......

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多