Function template for a multi-type input parameter

If one (or more) of the input parameters may be of any of several different types, treat this according to the "several possible cases" rule. For example, consider the data definition
; Data definition:
; A point is either
;   a number, indicating a position on the number line, or
;   a posn, indicating a position on the x-y plane.
; A posn is an ordered pair of numbers (x,y)
(define-struct posn (x y))
; make-posn: number number => posn
; posn-x: posn => number
; posn-y: posn => number
; posn?: object => boolean
The template for a function that takes a point parameter is therefore a cond with two cases:
(define (function-for-point the-point)
   (cond [(number? the-point) ...]
         [(posn? the-point) ...]))
Furthermore, if (as in this example) some of the possible types are themselves complex, the template for those cases can be elaborated according to the compound data type rule:
(define (function-for-point the-point)
   (cond [(number? the-point) ...]
         [(posn? the-point) 
          ... (posn-x the-point) ...
          ... (posn-y the-point) ...]))

Last modified: Fri Mar 14 16:29:23 EST 2003
Stephen Bloch /