2013-04-09 3 views

ответ

2

У схемы нет перегрузки на основе типов a`la 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 
     )) 

Это хакеры, но иногда они необходимы.

Мой обычный подход функции высшего порядка и случай лямбда

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

Теперь, если нам нужно специальное лечение для отображения все, что мы пройти в функции, чтобы сделать его.

Смежные вопросы