2012-06-05 6 views
6

内のすべてのユーザー定義変数は、私が定義されているすべての変数のリストを取得するには一覧Pythonでスキーム

(require xrepl) 
,apropos 

を行うことができますdir()とラケットで(5.2)を使用することができます。すべてのスキームで同じことをするための移植可能な方法は何ですか?それで、システムとモジュールのすべての変数をどのようにフィルタリングするのですか?変数の完全なリストはラケットでかなり難しいです。

+0

「システムとモジュールの変数」とはどういう意味ですか?あなたが見たいものはどれですか? –

+0

すべてのスキームでそれを行う方法はありません。 –

+0

私はユーザ変数を見たいだけで、他のモジュールやシステムによって定義されたものではありません。 – BnMcGn

答えて

6

ラケットの特定のモジュールによってエクスポートされた名前を取得するには、module->exportsを使用します。他の実装については、ドキュメントで参照する必要があります。

> (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

これは興味深くて便利ですが、それは私が望むものの逆です。私はそれらのすべてをフィルタリングして残っているものを見たいと思います。 – BnMcGn

+1

Racket REPLでは、* namespace-mapped-symbols *を使用して、現在アクセス可能なすべてのバインディングのリストを取得し、その言語からバインディングを引き出すことができます。 *(set-> set(list-> set(namespace-mapped-symbols))(list-> set(namespace-mapped-symbols(module-> namespace 'racket)))))*)のようなものです。 – dyoo

+0

@dyooあなたのコードは、私が合理的に得ることができるほど近くに来ます(つまり、xreplやgeiserのような異なる環境で動作します)。あなたが答えとして投稿するなら、私はそれを受け入れるでしょう。 – BnMcGn

2

まあ、ここ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>> 

あなたはバインディングが特定のモジュールによってエクスポート取得するコンテキストを変更することができます。

[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

ニース!悲しいかな、xreplにはバインディングがありません – BnMcGn