Can these not be used in map and other higher order functions, like apply and filter?
(define (Class:Class)
(cons (context) (args)))
(new Class 'Rectangle)
(new Class 'Circle)
(define (Rectangle:area p)
(mul (p 3) (p 4)))
(define (Circle:area c)
(mul (pow (c 3) 2) (acos 0) 2))
(set 'myrect (Rectangle 5 5 10 20))
(set 'mycircle (Circle 1 2 10))
(map (curry :area) (map eval '(myrect mycircle))) => (200 314.1592654)
(map (curry :area) '((Rectangle 5 5 10 20)(Circle 1 2 10))) => (200 314.1592654)
remember that:
(:area myrect)
; same as
(: area myrect)
So its really the ':' operator which gets applied by 'map' or 'apply'. For that reason the 'area' parameter has to be curried.
Gotcha. Thank you.