<HTML><FONT FACE=arial,helvetica><FONT  SIZE=2 FAMILY="SANSSERIF" FACE="Arial" LANG="0">In a message dated 10/5/2002 8:41:14 PM Central Daylight Time, auerja@cs.latrobe.edu.au writes:<BR>
<BR>
<BR>
<BLOCKQUOTE TYPE=CITE style="BORDER-LEFT: #0000ff 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px; PADDING-LEFT: 5px">Included the compat.ss library, so I can use get and put prop, but I can't <BR>
get a list of properties associated with a symbol.</BLOCKQUOTE><BR>
<BR>
Perhaps the following would be useful...<BR>
<BR>
I have extracted the two property list functions from compat.ss, and have added<BR>
three functions: <BR>
&nbsp; (property-list sym), which returns the property list for the symbol in the form of an association list<BR>
&nbsp; (property-names sym), which returns a list of the names of the properties for the symbol<BR>
&nbsp; (remprop sym prop), which removes a property from the symbol's property list<BR>
<BR>
Jim<BR>
<BR>
----------------------------------------------------------------<BR>
<BR>
(module symprop mzscheme<BR>
&nbsp; <BR>
&nbsp; (provide getprop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putprop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remprop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property-names<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property-list)<BR>
&nbsp; <BR>
&nbsp; (define table (make-hash-table))<BR>
&nbsp; <BR>
&nbsp; (define getprop<BR>
&nbsp;&nbsp;&nbsp; (case-lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(k prop) (getprop k prop #f)]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(k prop def)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([al (hash-table-get table k (lambda () #f))])<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if al<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([v (assq prop al)])<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if v<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cdr v)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def))]))<BR>
&nbsp; <BR>
&nbsp; (define putprop<BR>
&nbsp;&nbsp;&nbsp; (lambda (k prop nv)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([al (hash-table-get table k (lambda () '()))])<BR>
    (let ([v (assq prop al)])<BR>
    &nbsp; (if v<BR>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set-cdr! v nv)<BR>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (hash-table-put! table k (cons (cons prop nv) al)))))))<BR>
&nbsp; <BR>
&nbsp; (define remprop<BR>
&nbsp;&nbsp;&nbsp; (lambda (k prop)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([al (hash-table-get table k (lambda () #f))])<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if al<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (hash-table-put!<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table k<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let loop ((al al))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(null? al) '()]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(eq? prop (caar al)) (cdr al)]<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [else (cons (car al) (loop (cdr al)))])))))))<BR>
&nbsp; <BR>
&nbsp; (define (property-names k)<BR>
&nbsp;&nbsp;&nbsp; (let ([al (hash-table-get table k (lambda () '()))])<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (map car al)))<BR>
&nbsp; <BR>
&nbsp; (define (property-list k)<BR>
&nbsp;&nbsp;&nbsp; (hash-table-get table k (lambda () '())))<BR>
&nbsp; <BR>
&nbsp; )<BR>
<BR>
</FONT></HTML>