2009-11-23 11 views

答えて

22

アポストロフィは、次の式(シンボル名)を解析しないようにインタープリタに指示する引用です。従って、'add-to-listは、評価されることを意図したリスト値を含むシンボルを得る。

シンボルの詳細については、Symbolのドキュメント(具体的には、Symbol Componentsシンボルに名前、値、関数定義、プロパティリストがあります)を参照してください。

ドキュメントを読まないと、私はそれを説明します:Emacs lispのevaluation strategyは値渡しです(名前や参照などではなく)。見積もりが存在しない場合、flymake-allowed-file-name-masksは値に評価され、add-to-listはリストに直接作用する必要があります。以下の例外を除き、これは機能します。リストが空の場合、元の変数が指していたものを変更する方法はありません。同じ理由で、リストの先頭に要素を追加することはできません。

これらの2つのケースを機能させるには、実際には変数名が必要です。が指し示すものを変更することができます。

Introduction to Evaluation,Modifying List Variables、およびModifying Existing List Structuresを読むと、おそらく役に立ちます。

box diagramsに精通している場合は、おそらくこれが役立ちます。

はリストにその some-varポイントを想像してみて:

somevar 
    | 
    | 
    v 
--- ---  --- ---  --- ---   
| | |--> | | |--> | | |--> nil 
--- ---  --- ---  --- ---   
    |   |   |    
    |   |   |    
    --> rose  --> violet --> buttercup 

そして、あなたはそのリストの前に何かを置くことを望んでいました。

あなたと仕事をしなければならないすべてはsomevarでポインタのであれば、あなたができる最善のは、リストの先頭に新しい要素を入れていますが、実際には(に何somevarポイントを変更することはできませんsomevarがないため、の値はです)。これと同じように:だから

   somevar 
       | 
       | 
       v 
--- ---  --- ---  --- ---  --- ---   
| | |--> | | |--> | | |--> | | |--> nil 
--- ---  --- ---  --- ---  --- ---   
    |   |   |   |    
    |   |   |   |    
    --> tulip  --> rose  --> violet --> buttercup 

、独自の'add-to-list関数を記述するためには、変数名が必要です。

もちろん、'add-to-listmacroと書いた場合、そのような制限はありません。

+1

私は今、完璧な概念を得ました! 他の言語での参照によって呼び出すことができます。ありがとう! – kjshim

関連する問題