方案:重载内置程序,一般重载

标签 scheme overloading

更具体地说,您可以重载内置的 Scheme 程序显示吗?

更一般地说,如何在 Scheme 中重载任何过程?

最佳答案

Scheme 没有基于 Java/C++ 类型的重载,它是动态类型的,因此没有意义。

你可以做一些事情:

您可以根据参数的结构进行重载:

(define overload1
    (case-lambda
        ((x y) (+ x y))
        ((x y z) (+ (- x y) z))))

这并没有真正帮助你,因为 display无论如何都只会接受一个论点。
(define (overload-kinda x)
    (cond
        ((list? x) (do-list x))
        ((symbol? x) (do-sym x))
        ;etc
        ))

这是hacky但有时是必要的。

我通常的方法是高阶函数和情况 lambda
(define my-display
    (case-lambda
        ((x) (display x))
        ((x f) (display (f x)))))

现在,如果我们需要特殊处理来显示任何内容,我们会传入一个函数来渲染它。

关于方案:重载内置程序,一般重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892214/

相关文章:

error-handling - 迭代器的赤壁方案错误

c# - 关于int和double重载的问题

c# - 重载导致代码膨胀

scheme - 帮助解释 Scheme 中的 `cons` 如何工作?

functional-programming - 为什么define-syntax of or in scheme需要考虑三个条件?

pattern-matching - 可匹配中的列表到模式转换(鸡方案)

不同类型的 C++ 映射赋值重载

java - 产品方法重载

c# - 通用重载决议

stream - 交替两个值