home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM A / PD-ROM A.iso / Programming / Programming Languages / Gambit LISP / sym.scm < prev    next >
Encoding:
Text File  |  1991-01-28  |  856 b   |  31 lines  |  [TEXT/gamI]

  1. ; Symbol manipulation procedures not in standard Scheme
  2.  
  3. (define gensym
  4.   (let ((count 0))
  5.     (lambda l
  6.       (let ((prefix (if (pair? l)
  7.                       (if (symbol? (car l))
  8.                         (symbol->string (car l))
  9.                         (car l))
  10.                       "g")))
  11.         (let ((sym (make-vector 3)))
  12.           (vector-set! sym 0 (string-append prefix (number->string count)))
  13.           (vector-set! sym 1 '())
  14.           (vector-set! sym 2 #f)
  15.           (##subtype-set! sym 1)
  16.           (set! count (+ count 1))
  17.           sym)))))
  18.  
  19. (define (get sym prop)
  20.   (let ((x (assq prop (##vector-ref sym 1))))
  21.     (if x
  22.       (cdr x)
  23.       #f)))
  24.  
  25. (define (put sym prop val)
  26.   (let ((x (assq prop (##vector-ref sym 1))))
  27.     (if x
  28.       (set-cdr! x val)
  29.       (##vector-set! sym 1 (cons (cons prop val) (##vector-ref sym 1))))
  30.     #f))
  31.