更具体地说,您可以重载内置的 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/