[gambit-list] gambit introspection

Marc Feeley feeley at iro.umontreal.ca
Sun Mar 22 11:11:02 EDT 2009


On 22-Mar-09, at 8:52 AM, Eduardo Cavazos wrote:

> Jose,
>
> I just stumbled on this today. Returns a vector of all the defined  
> symbols:
>
>   (##symbol-table)

Nope!  The symbol table contains chains of symbols which hash to a  
given element of the symbol table.  One of the fields of symbol  
objects points to the next symbol.  So use something like this instead:

(define (symbol-table->list st)

   (define (symbol-chain s syms)
     (let loop ((s s) (syms syms))
       (if (symbol? s)
           (loop (##vector-ref s 2) (cons s syms))
           syms)))

   (let loop ((lst (vector->list st)) (syms '()))
     (if (pair? lst)
         (loop (cdr lst) (symbol-chain (car lst) syms))
         (reverse syms))))

(define (interned-symbols)
   (symbol-table->list (##symbol-table)))

(pp (length (interned-symbols)))


Marc




More information about the Gambit-list mailing list