2017-02-23 21 views
0

私はインターネット上の不変/可変変数のほとんどすべての定義を読んだことがありますが、初心者としては完全に把握していないので、誰かがそれを本当の意味で説明できるかどうか疑問に思っていました。不変変数と可変変数の違いは何ですか?

任意のプログラミング言語の変更不能な変数(またはオブジェクト)は、変数に値が割り当てられた後にその変数の値を変更できない場合にわかります。例えば、私はHaskellのプログラミング言語を使用しています、と私は書く:

let x = 5 

Haskellは不変の変数を持っているので、私のコードの書き込みの行の後にあれば、xはそう5以外の値を持つことはできません。

私は実際にはxの値を変更しませんでしたが、同じ名前の新しい変数を作成しました。これはxを呼び出すと参照される変数になります。 xの値を2とします。

しかし、可変変数とは何ですか?また、どのようなpプログラミング言語にはそれがありますか?これは私のために霧になる場所です。人々が可変変数を言うとき、あなたが値を持つ変数またはオブジェクトを明示的に参照しているので、が実際には初期値を割り当てられた後に変更されます。

これは、変数変数がある場合は、その変数のコンピュータメモリに実際に操作するを操作し、変数が不変の場合は、コンピュータのメモリまたはその何処にその場所を操作できないということですか?

私は言ったように、私はmutable =初期値割り当て後の変数の値を変更できることを理解しています。私は定義を得る。しかし、私は実際には何が「裏側」で起こっているのかを理解していません。私は実際の可変変数に関する簡単な例を探していると思います。

答えて

0

これは不変性とは何の関係もありません

let x = 5 
x = 2 

これは再割り当て間違いHaskellで許されていない


まず者は、定期的なlet割り当て

Prelude> let x = 5 in x 
5 
it :: Num a => a 
を見てみましょう

あなたはb IND xletを使用して、ネストされたlet新しいxを再バインド - この事実x

Prelude> let x = 5 in let x = 2 in x 
2 
it :: Num a => a 

letは基本的にラムダ

Prelude> (\x -> x) 5 
5 
it :: Num a => a 

そしてもちろんaのです覚えておいてくださいラムダはラムダを返すことができます。陰影灰色を示す

Prelude> (\x -> (\x -> x)) 5 2 
2 
it :: Num a => a 
関連する問題