Hi all, I thought this is a useful example for language extensions:
http://rosettacode.org/wiki/Numeric_error_propagation It shows how 'redef' can be used to redefine a function in terms of itself. Here, the arithmetic operators +, -, *, / and ** are overloaded to behave differently when the arguments are cons-pairs (i.e. handle the uncertainty terms). Arithmetics with normal numbers continue to work as before. The distinction is handled by checking the two variables 'R' (result) and 'N' (next argument): (if2 (atom R) (atom N) (+ R N) # Handle the normal case ... # Handle the extended case The point is that at the end of the day, you can write functions like (de distance (X1 Y1 X2 Y2) (** (+ (** (- X1 X2) 2.0) (** (- Y1 Y2) 2.0)) 0.5 ) ) which behave correctly depending on the argument type. This mechanism might be used to implement other application-specific mixed-mode arithmetics, e.g by using the rational numbers of "@lib/frac.l". Cheers, - Alex -- UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe
