You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中是否存在Phi组合子(即Haskell中的on函数)?

Scala中的Phi组合子(对应Haskell的on函数)

Scala标准库中并没有直接提供与Haskell on 函数完全等价的通用Phi组合子,但你可以非常简洁地实现它,或者利用现有库中的类似能力。

手动实现通用on函数

Phi组合子(on)的核心逻辑是:将一个二元函数转换为以某个提取函数处理后的结果作为参数的二元函数。用Scala可以这样写:

def on[A, B, C](f: (B, B) => C)(g: A => B): (A, A) => C =
  (a1, a2) => f(g(a1), g(a2))

举个实际例子,比如用它来基于字符串长度比较两个字符串:

val compareLength = on(_.compareTo(_))(_.length)
compareLength("apple", "banana") // 返回负数,因为5 < 6

利用标准库中的类似能力

如果是用于排序场景,Scala的Ordering特质已经内置了on方法,比如:

val byLengthOrdering = Ordering[String].on(_.length)
List("apple", "banana", "cherry").sorted(byLengthOrdering)
// 结果: List("apple", "banana", "cherry")(长度5,6,6)

这种内置的on本质上和Phi组合子是同一个逻辑,只是专门针对排序比较的场景做了封装。

内容的提问来源于stack exchange,提问作者Max Smirnov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:05:03