newLISP Fan Club

Forum => Anything else we might add? => Topic started by: Jeff on June 03, 2008, 10:35:47 AM

Title: Map and FOOP context functions
Post by: Jeff on June 03, 2008, 10:35:47 AM
Can these not be used in map and other higher order functions, like apply and filter?
Title:
Post by: Lutz on June 03, 2008, 11:08:58 AM
(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.
Title:
Post by: Jeff on June 03, 2008, 11:17:58 AM
Gotcha.  Thank you.