割り当て、評価、名前のバインドの違いは何ですか?


7

Nameバインディングが識別子(data / code / expression)にいくつかの値を割り当てることを読みました割り当て評価は同じことをしているようです。それは紛らわしい。バインドされた変数に値が割り当てられているのに、値が割り当てられていない自由変数が1つであると言えますか?

回答:


6

バインドは、指定された適切に区切られたコンテキストで物(または値)に名前​​を付けることと関係があります。割り当てとは、ある場所(変数)に物(または値)を格納することです。別の割り当てでは、以前の値を新しい値に置き換えることができます。評価は、正式なテキストのすべての識別子を何か(値付き)にバインドすることで構成されます。数学では、これらの識別子は変数と呼ばれることが多く、コンピュータサイエンスの変数(つまりメモリストレージ)の概念と混同されます。

より直感的な詳細を提供しようとする

名前バインディングは、関連する数学またはプログラミングテキストの一部(スコープと呼ばれる)内の識別子に意味を付けます。この意味は、テキストが解釈されるとき、確かにあるドメインの値と見なすことができます。

たとえばfoo、整数変数として宣言する場合foo、スコープ内に付加される値は整数変数です。整数変数は、変更される可能性がある整数値を運ぶことができるコンテナに非公式に表示される場合があります。また、コンテンツを格納できるメモリ内の場所のアドレスとして見ることもできます。

ただしfoo、整数25として宣言した場合、スコープ内でfooの使用は25の使用と同じです。fooを整数定数として宣言した場合、fooは変更できないため、その値を指定する必要があります。

バインディングとは、名前のスコープ内で変更されない値に名前を付けることです。例としては、「for the purpose of this document, Mr. Brown, and the Smith family shall be called the beneficiary.」が「法的文書である」と述べた法的文書です。そして、文書のどこでも、この単語の使用はbeneficiaryブラウン氏とスミス家を意味します。あなたはそれを地元の用語の定義として見ることができます。物に名前を付けることと関係があります。拘束力とは、話す、読む、書くことです。値を実行したり移動したりすることではなく、割り当てに対応します。

変数は、値を含むことができるメモリのチャンクと見なされる場合があります。変数がある場合、この変数に含まれる値を割り当てで変更できます。場合はfoo、現在のスコープ内の変数に(または意味)バインドされている、あなたはに値を割り当てることができますfooによって示さ変数に、すなわちfoo、またはその変数に含まれる値を読み込みます。そして、新しい割り当てでその値を変更できます。

したがって、バインディングは、プログラムのテキストまたは数学的談話における名前の意味を伝える操作です。テキストは変化しないという意味で、静的です。しかし、割り当ては、値を変数(つまり、通常はメモリ内の場所であるコンテナ)に格納することからなるプログラミング概念です。これは、値がメモリに格納される方法(の表現)に関連する動的な概念であり、プログラムの進行に伴って変化します。

変数は、バインドされる可能性のある名前とは無関係に存在する可能性があることに注意してください。これは、簡単な例をとるために、配列の要素の場合です。

さまざまなコンテキストで、定義されていない名前を使用する式またはテキストを検討する場合があります。たとえば、算術式であると書くことができます 。次に、変数とがいくつかの値(3や12など)にバインドされている環境(おおよそのスコープを読み取る場合があります)を関連付けて変数を評価し、式によって取得された値に関心を持つことができます。評価は、それぞれが特定の値を持つ名前のセットの関連付けです。名前評価は正式な数学でより多く使用されますが、割り当てはプログラミングの概念です。(a2b2)/(ab)ab


要約すると、基本的に、すべての操作が変数/識別子/プレースホルダーに値を割り当てることを確認します。違いはコンテキストです。ゲスト(プログラム)をホスト(マシン)にマッピングすると、と言いbindingます。プログラムの実行中に変数が何らかの値にバインドされている場合は、代わりにformal / csコンテキストでit was assigned言うことをおvaluated勧めします。今日、自由/束縛変数を検討し始めて混乱しました。それはフォーマル/ csコンテキストのようなものですが、コンパイラ/コンピュータのエンジニア専門用語が使用されていますか?
2015

2
@RecognizeEvilasWaste私は明確にしようとしました。しかし、数学的用語がコンピュータサイエンスの用語と矛盾するという事実のため、困難があります。変数は値にバインドできません。変数には値が割り当てられます。識別子は意味にバインドされていますが、意味の正式な概念は、セマンティクスドメインのある値です。識別子を割り当てたり、変数をバインドしたりしません。識別子は構文、音声です。変数はメモリであり、情報を格納するために使用されます。実際、正式なスピーチから派生したのはコンピューター用語です。
バブー2015

2
あなたの混乱は理解できます。ラムダ計算では、変数という単語は、私が識別子と呼ぶものに使用されます。より一般的には、関数型プログラミングと呼ばれる、割り当てを使用することが想定されていないプログラミングの全分野があります。したがって、原則としてすべてがバインディングを介して行われますが、プログラミングのスタイルは大きく異なります。ラムダ計算はその基本的な正式な例です。しかし、彼らはまだ識別子とは何かに関する変数について話します。あなたの質問は公平であり、用語は乱雑です。よく頑張った。
バブー2015

@RecognizeEvilasWasteあなたの質問は実際には非常に良いものです。これが初心者にとってどれほどのあいまいさを生み出すのか、私は知りませんでした。
バブー

初心者だけでなく。私はこれらの問題についてかなりの経験があると思います。それらの意味が理解できます。しかし、似たようなことを言いたいときは、どの用語を使用するかが常に困難です。en.wikipedia.org/wiki/User:Javalenok物事間の関係を確認することも好きです。これは理解に役立ちます。
Val
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.