[plt-scheme] help: Proplist
In a message dated 10/5/2002 8:41:14 PM Central Daylight Time,
auerja at cs.latrobe.edu.au writes:
> Included the compat.ss library, so I can use get and put prop, but I can't
> get a list of properties associated with a symbol.
Perhaps the following would be useful...
I have extracted the two property list functions from compat.ss, and have
added
three functions:
(property-list sym), which returns the property list for the symbol in the
form of an association list
(property-names sym), which returns a list of the names of the properties
for the symbol
(remprop sym prop), which removes a property from the symbol's property
list
Jim
----------------------------------------------------------------
(module symprop mzscheme
(provide getprop
putprop
remprop
property-names
property-list)
(define table (make-hash-table))
(define getprop
(case-lambda
[(k prop) (getprop k prop #f)]
[(k prop def)
(let ([al (hash-table-get table k (lambda () #f))])
(if al
(let ([v (assq prop al)])
(if v
(cdr v)
def))
def))]))
(define putprop
(lambda (k prop nv)
(let ([al (hash-table-get table k (lambda () '()))])
(let ([v (assq prop al)])
(if v
(set-cdr! v nv)
(hash-table-put! table k (cons (cons prop nv) al)))))))
(define remprop
(lambda (k prop)
(let ([al (hash-table-get table k (lambda () #f))])
(if al
(hash-table-put!
table k
(let loop ((al al))
(cond
[(null? al) '()]
[(eq? prop (caar al)) (cdr al)]
[else (cons (car al) (loop (cdr al)))])))))))
(define (property-names k)
(let ([al (hash-table-get table k (lambda () '()))])
(map car al)))
(define (property-list k)
(hash-table-get table k (lambda () '())))
)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20021005/ebd3917c/attachment.html>