ビルドイン方式のインタープリタを持つよりソフトなユーザーを使用しています。私は "環境"の名前が(環境)であることを知っています。環境内のすべての機能とシンボルを見つけるにはどうすればよいですか?「環境」内のすべての関数と有界シンボルの検索方法
(define p (open-output-file "d:/test.txt"))
(display (the-environment) p)
これですべての機能が表示されますか? ありがとうございます。 Joe
ビルドイン方式のインタープリタを持つよりソフトなユーザーを使用しています。私は "環境"の名前が(環境)であることを知っています。環境内のすべての機能とシンボルを見つけるにはどうすればよいですか?「環境」内のすべての関数と有界シンボルの検索方法
(define p (open-output-file "d:/test.txt"))
(display (the-environment) p)
これですべての機能が表示されますか? ありがとうございます。 Joe
Eli Barzilayが指摘したように、環境内でバインドされているすべての名前を慎重に見つけることができるかどうかは、使用しているSchemeの実装によって異なります。
あなたは環境の「名前」は、あなたが実際にすることができ、MITのスキーム(9.1.1をリリース)と私自身の実験から(the-environment)
であることを特徴とするので、私は、あなたがMITのスキーム内で作業しているあなたの質問から推測環境にバインドバインディングの名前を列挙:
1 ]=> (define (add1 n) (+ n 1))
;Value: add1
1 ]=> (add1 3)
;Value: 4
1 ]=> (environment-bound-names (the-environment))
;Value 13: (add1)
1 ]=>
私が最初に上記遭遇したとき、私は少し驚きました。私は自分自身で定義した単一のものだけでなく、環境の中でより多くの束縛を見ることを期待していました。
親環境に再帰的に移動する必要があるためですか?まあ:
1 ]=> (environment-parent (the-environment))
;Value: #f
1 ]=>
あなたが(the-environment)
を検査することでアクセスすることができますバインディングに加えて、1もsystem-global-environment
経由でアクセス可能バインディングを検査しなければならないように思える。そこから
1 ]=> (define global-names (environment-bound-names system-global-environment))
;Value: global-names
1 ]=> (length global-names)
;Value: 4050
1 ]=> (not (null? (memq '+ global-names)))
;Value: #t
1 ]=> (car global-names)
;Value: valid-hash-number?
、1はenvironment-lookup
のような機能を使用することができます
1 ]=> (environment-lookup system-global-environment '+)
;Value 14: #[arity-dispatched-procedure 14]
1 ]=> ((environment-lookup system-global-environment '+) 2 3)
;Value: 5
(これは、たとえば、次のような場合に便利です。 Oシステム、地球環境の手順にバインドされている名前だけにglobal-names
リストをフィルタリング)
FYI:私は私の頭の上から上記のを知りませんでした;。幸いなことに、MIT Schemeは多くの他のLisp方言のように、あなたが探している関数の名前の一部を知っていると思うときに非常に便利なapropos
関数を提供しています。 (apropos n)
は、名前にn
を持つすべてのバインドされたシンボルを出力します。私の場合は、推測して(apropos 'env)
を実行して、環境に関連するすべてのシンボルを表示しました。このリストはあまりにも長すぎて例としてここに書き込むことはできませんが、ここには似たようなものがあります:
1 ]=> (apropos 'lookup)
#[package 14 (user)]
#[package 15()]
1d-table/lookup
dld-lookup-symbol
environment-lookup
environment-lookup-macro
environment-safe-lookup
hash-table/lookup
rb-tree/lookup
wt-tree/lookup
;Unspecified return value
私はdunnoです。それは? – erjiang
実装によって異なります。 –
柔らかい?あなたは精緻化できますか? – soegaard