哪些编程语言支持一次编写多处使用?

3
作为一个例子,我们希望能够在类型为OrderedCollection[Monoid]的实体上定义sum。这里的 Monoid 是一个带有零元的可结合操作的特质/接口。然后我们就不需要再复制和粘贴sum代码来使用它了。但是,一个类型可以以多种方式成为单子:例如,正整数可以使用加号和0或者乘号和1。我不能想出一个很好的处理方法。

有一个支持Scala系统的答案(已经消失了?),但它非常丑陋,特别是因为可以默认的一般参数出现在最后,而它自然应该靠近它修改的东西。我有这个想法。假设我们允许富文本。特别是假设我们允许下标(小字体向下位移)。如果没有提供下标,则调用此函数使用默认值似乎不那么丑陋。它可能可以使用方法.subscript,类似于.apply。这是从普通文本转换为富文本语言fmt的令人信服的原因吗? - Robert Smart
问题标题应进行编辑,因为它并不反映实际问题。应该改成类似于“如何在一种语言中实现抽象幺半群并避免歧义?”的样子。 - nponeccop
2个回答

1

0

你肯定需要明确你想使用哪个操作符吧?我不认为有任何明智的方法可以避免这个问题。

在Clojure中,我会使用高阶函数:

(defn sum-with [op]
  (fn [coll] 
    (reduce op coll)))

然后你可以这样做:

(def sum1 (sum-with +))
(sum1 [1 2 3 4])
=> 10

(def sum2 (sum-with *))
(sum2 [1 2 3 4])
=> 24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接