2013-04-09 7 views

回答

2

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,但有時是必要的。

我通常的做法是高階函數和的情況下拉姆達

(define my-display 
    (case-lambda 
     ((x) (display x)) 
     ((x f) (display (f x))))) 

現在,如果我們需要顯示任何事情,我們在一個函數傳遞給使其特別處理。