Re: プログラミングと論理学(Re: Re [2]:大文字と小文字の区別)
河野真治 @ 琉球大学情報工学です。
In article <cj0jmr$s0m$1@caraway.media.kyoto-u.ac.jp>, <kounoike@mbh.nifty.com> writes
> なぬ!破壊代入ってそうゆうことを指していたんですか。となると,変数
> への代入は全て破壊代入と呼べると思いますが,わざわざ破壊を付け
> なくても単なる代入で十分な気がします。引数付きの関数呼び出しなん
> かこれなしで実現できそうもないし。そんな言葉を作る必要性があるの
> か私には理解できません。
それは、ちょっと違う。最初の代入だけが特別扱いされるってな感じですね。
値を書き換えるのがだめなわけ。
・- ・- ・- ・- ・- nil
| | | | |
a b c d e
ってのが良くある線形リストなんですけど、
x y
| |
v v
・- ・- ・- ・- ・- nil
| | | | |
a b c d e
というように変数に参照が代入されているとしますよね。
*x == (a b c d e)
*y == (d e)
に見えるわけなんだけど、
*y = (f g)
みたいな代入をすると、
*x == (a b c f g)
と x も変わってしまう。これは破壊的な代入です。
x y
| |
v v
・- ・- ・- ・- ・- nil
| | | | |
a b c f g
*x に影響を与えないようにするには、
*y の指している先を新しく作ってから、代入してやる
ってことをします。
x y
| |
| v
| ・- ・- nil
| | |
| f g
v
・- ・- ・- ・- ・- nil
| | | | |
a b c d e
ってな感じ。
この違いを理解するには、ポインタを知らないと無理ってな話。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735