2012-06-05 7 views
6

in Python posso usare dir() e nella racchetta (5.2) che posso fareLista tutte le variabili definite dall'utente in programma

(require xrepl) 
,apropos 

per ottenere un elenco di tutte le variabili definite. Quale metodo portatile esiste per fare lo stesso in tutti gli schemi? Fatto ciò, come faccio a filtrare tutte le variabili del sistema e del modulo? L'elenco completo delle variabili è piuttosto scoraggiante nel racket.

+0

Cosa intendi per "variabili di sistema e modulo"? Quali * vuoi * vuoi vedere? –

+0

Non c'è modo di farlo in tutti i regimi. –

+0

Voglio solo vedere le variabili utente, non roba definita da altri moduli o dal sistema. – BnMcGn

risposta

6

Per ottenere i nomi esportati da un modulo specifico in Racket utilizzare module->exports. Per altre implementazioni, è necessario consultarlo nella documentazione.

> (module->exports 'racket/list) 
'((0 
    (add-between()) (append*()) (append-map()) 
    (argmax())  (argmin())  (cons?()) (count()) 
    (drop())  (drop-right()) (eighth()) (empty()) 
    (empty?())  (fifth())  (filter-map()) 
    (filter-not()) (first())  (flatten()) 
    (fourth())  (last())  (last-pair()) 
    (make-list()) (ninth())  (partition()) 
    (range())  (rest())  (second()) 
    (seventh())  (shuffle()) (sixth()) 
    (split-at()) (split-at-right()) (take()) 
    (take-right()) (tenth()) (third()))) 
'((0 (remove-duplicates()))) 
+0

Questo è interessante e utile, ma è l'inverso di ciò che voglio. Mi piacerebbe filtrare tutti quelli fuori e vedere cosa è rimasto. – BnMcGn

+1

Nel REPL Racket, è possibile utilizzare probabilmente * namespace-mapped-symbols * per ottenere un elenco di tutti i binding attualmente accessibili e quindi sottrarre i binding dalla lingua. Qualcosa come * (set-> lista (set-sottrarre (lista-> imposta (namespace-mapped-symbols)) (list-> set (namespace-mapped-symbols (module-> namespace 'racket))))) *. – dyoo

+0

@dyoo Il tuo codice è il più vicino che riesco a ottenere (cioè funziona in ambienti diversi come xrepl e geiser). Se lo pubblichi come risposta, lo accetto. – BnMcGn

2

Bene, ecco come farlo in guile (v> = 2.0.):

[email protected](guile-user)> ,binding 
%module-public-interface #<variable 9e55e98 value: #<interface (guile-user) 9df6678>> 

[email protected](guile-user)> (define foo 'bar) 

[email protected](guile-user)> ,binding 
foo      #<variable a06fe28 value: bar> 
%module-public-interface #<variable 9e55e98 value: #<interface (guile-user) 9df6678>> 

È possibile modificare i contesti per ottenere le associazioni esportate dai moduli:

[email protected](guile-user)> (use-modules (srfi srfi-1)) 
[email protected](guile-user)> ,module (srfi srfi-1) 
[email protected](srfi srfi-1)> ,binding 
reduce-right   #<variable 9ead2d0 value: #<procedure reduce-right (f ridentity lst)>> 
delete     #<variable 9eb7aa8 value: #<procedure delete (_ _ #:optional _)>> 
lset-xor!    #<variable 9eb7c90 value: #<procedure lset-xor! (= . rest)>> 
take!     #<variable 9ead640 value: #<procedure take! (lst i)>> 
... 
+0

Bello! Ahimè, xrepl non ha, vincolante – BnMcGn