入れ子構造
★1a.入れ子構造の人間たち。
『続斉諧記』(梁・呉均)2「腹の中の恋人(陽羨鵞籠)」 旅で道連れになった男が、口の中から、酒食の入った盆・箱と若い女とを吐き出す。男が酔って眠ると、女は口の中から愛人である青年を吐き出す。青年はまた口の中から自分の恋人を吐き出す。しばらくして、青年が恋人を呑みこみ、女が青年を呑みこみ、男が女と食器類を呑みこんで、去って行く〔*類話である『西鶴諸国ばなし』巻2-4「残る物とて金の鍋」では構造が単純化されており、仙人が酒食と美女を吐き、美女が恋人の若衆を吐くが、若衆は何も吐き出さない〕。
『太平広記』巻386所引『玄怪録』 北周の時代(6世紀)。居延部落の長・勃都骨低の邸に、数十人の芸人が訪れた。彼らは、背の高い者が低い者を呑み込み、肥った者が痩せた者を呑み込み、互いを呑み合って2人だけが残る、という芸を見せた。次いで彼らは、呑み込んだ者を吐き出し始めた。吐き出された者がまた1人を吐き出し、次々に人を吐き出して、人数がもとにもどった。彼らは人間ではなく、その正体は数多くの皮袋だった。
★2.入れ子構造の女性器。
『女体消滅』(澁澤龍彦『唐草物語』) 中納言長谷雄は鬼から女を与えられ(*→〔百〕1の『長谷雄草子』)、80日目の夜に女の下紐を解いて朱門(=女性器)を見る。すると朱門の奥にまた朱門があり、稲荷の鳥居のごとく朱門がずらりと重なって、無限の入れ子構造になっていた。長谷雄は、自分の陽鋒(=男性器)で第1の朱門を突破しようと試みる。たちまち女体は消滅して水と化し、長谷雄は全身びしょぬれになった。
★3.入れ子構造の動物。
『異苑』77「狐の中から狐が出る」 男が1匹の狐を捕らえて腹を割くと、中からまた狐が1匹出てきた。その腹を割いたら、また狐が出た。その腹を割いて、ようやく臓物が出た。3匹の狐は不思議なことに、みな同じ大きさだった。
★4.入れ子構造の戯曲。
『呪はれた戯曲』(谷崎潤一郎) 作家が妻を山中に連れて行き、自作の戯曲を読み聞かせる。その内容は、「作家が妻を山中に連れて行き、自作の戯曲(『作家が妻を山中に連れて行き、自作の戯曲を読み聞かせ、その後、妻を谷底へ突き落として、事故死のように見せかける』という内容)を読み聞かせ、その後、戯曲どおりに妻を谷底へ突き落として事故死のように見せかける」というものである。作家は戯曲を読み聞かせた後、戯曲どおりに妻を谷底へ突き落として、事故死のように見せかける。
『神の書跡』(ボルヘス) 虜囚の「わたし」は、牢の床に砂が1粒落ちている夢を見る。夢を見るたびに砂は2粒、3粒と増えてゆき、やがて無数の砂粒で「わたし」は死にそうになる。目覚めても砂はある。誰かが「わたし」に、「汝は真に目覚めたのでなく、前の夢へと目覚めたのだ。その夢はまたもう1つの夢の中にある。無限に夢が重なるのだ」と告げる。
『三段式』(星新一『さまざまな迷路』) 宇宙を1人で航行する飛行士の退屈しのぎに、3段式の睡眠薬が開発された。刃物を持つ男たちに追われる夢を見て、ハッと目覚めると、戦場で敵軍に包囲されていた。しかしそれも夢で、そこから目覚めると、今度は大洪水が押し寄せて来る。それでもまだ夢の中であり、もう1度目覚めて、やっと現実の宇宙船内に戻れた。夢から目覚めること3度で、ようやく現実世界に帰還できるのだ。
『スマラ(夜の霊)』(ノディエ) 新妻リシディスとともに眠るロレンツォは、ギリシア時代の人物ルキウス(*→『黄金のろば』の主人公)になった夢を見る。そのルキウスは、馬に揺られつつ夢を見て、コリントス戦で死んだ友人ポレモンに出会う。ポレモンは、魔女メロエと夜の霊スマラに苦しめられる悪夢をルキウス(=ロレンツォ)に語る。うなされるロレンツォを、新妻リシディスが目覚めさせようと呼びかける。
ネスティング
(入れ子構造 から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/05/30 22:40 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2013年8月)
|
構造化プログラミングにおけるネスティング(英: Nesting)、ネスト、入れ子とは、プログラムの構造が再帰的に繰り返されて記述されること。このような構造をネスト構造(英: Nested structure)、入れ子構造と呼ぶ。この記事ではC言語風の擬似コードを用いるが、ネスティングの概念はC言語に限らない。また、名前空間などC言語にない機能についても記述している。
概要
ネスティングには主に次の3パターンが存在する。
- 制御構造 - if文、switch文、for文、while文などを内包。これによって実際の処理を示す。
- データ構造 - 構造体、クラス、インタフェースなどを内包。プログラム内でのデータの管理方法を示す。
- 副プログラム - サブルーチン、プロシージャ、コルーチンなどを内包。処理の管理。
- 名前空間 - 名前空間の内部に別の名前空間を配する。
例えば、二分木と呼ばれるデータ構造はデータ構造のネスティングの好例である。
制御構造におけるネスティング
制御構造(分岐命令、ループ命令)のネスティング。スコープが入れ子になっている。
条件文のネスティング
以下の例では条件式1を判定して判定結果が"真"であるなら条件式2を判定し、条件式2の判定結果も"真"なら条件式3を判定する。条件式3も同様に判定結果が"真"であるなら処理1、処理2、処理3を全て処理した後に入れ子から脱出するが、それまでに条件式2が"偽"なら処理3だけを、条件式3が"偽"なら処理2と処理3をして入れ子から脱出する。
(C言語風での記述)
if (条件式1){
if (条件式2){ // ここの「if」は一番上の「if」の入れ子
if (条件式3){ // ここの「if」は一つ上の「if」と一番上の「if」の入れ子
処理1;
}
処理2;
}
処理3;
}
ループ文のネスティング
基本的に上述の条件文と動きが似ているため、記述も似ている。ループ文同士での入れ子はループ文を多用するために、プログラミングのミスによるバグの一つである無限ループが発生しやすくなる。
一番外側から順番に条件式を判定して行き、条件式の値が満たされなくなるまで内側の処理を繰り返していく。
(C言語風での記述)
for (int x = 0; 条件式1; x++){
for (int y = 0; 条件式2; y++){ //ここの「for」は一番上の「for」の入れ子
for (int z = 0; 条件式3; z++){ //ここの「for」は一つ上の「for」と一番上の「for」の入れ子
処理1;
}
処理2;
}
処理3;
}
ループ文と条件文が混合したネスティング
一番外側から順番に条件式を判定して行き、条件式の値が満たされなくなるまで内側の処理を繰り返していく。ただし外側から二番目のループ文では、条件式3の判定結果が真のときは処理1を、偽のときは処理2を処理する。
(C言語風での記述)
for (int x = 0; 条件式1; x++){
for (int y = 0; 条件式2; y++){ //ここの「for」は一番上の「for」の入れ子
if (条件式3){ //ここの「if」は一つ上の「for」と一番上の「for」の入れ子
処理1;
}
else{
処理2;
}
}
}
データ構造におけるネスティング
構造体のネスティング
構造体がメンバとして何らかの構造体を持っている状態は、構造体をネストしていると言える。
struct Point
{
int x;
int y;
};
struct BitmapImage
{
struct Point size;
unsigned char *image;
};
副プログラムにおけるネスティング
サブルーチン、プロシージャ、コルーチンにおけるネスティング。単に別のサブルーチンなどを呼び出すだけの場合や再帰呼び出しを指す場合もある。
サブルーチンのネスティング
以下の例はgccでのみコンパイル可能。
void message(void){
void hello(){ }// ネストされた関数定義
hello(); //ネストされた関数の呼び出し
}
//ここではhello()は呼び出せない
名前空間のネスティング
記述方法は先述のデータ構造の入れ子に酷似している。名前空間を分けることでサブルーチンなどの名称が競合するのを防止する。ちなみに、C言語には名前空間の機能はない。
namespace 名前空間1{
namespace 名前空間2{
int func(){} //名前空間1::名前空間2::func()のようにアクセスさせることが多い
}
}
関連項目
プログラミング
その他
外部リンク
入れ子構造(いれここうぞう)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/14 04:28 UTC 版)
「半沢直樹シリーズ」の記事における「入れ子構造(いれここうぞう)」の解説
一つの看板に二つの組織があること。東京中央銀行も、東京中央銀行という一つの看板に、旧Sと旧Tの二つの組織がある。都市銀行が合併すると、同じ場所に二つの店舗が重なる時がある。そうした場合、有力な方を残し、もう片方は廃店にするのである。
※この「入れ子構造(いれここうぞう)」の解説は、「半沢直樹シリーズ」の解説の一部です。
「入れ子構造(いれここうぞう)」を含む「半沢直樹シリーズ」の記事については、「半沢直樹シリーズ」の概要を参照ください。
入れ子構造と同じ種類の言葉
- 入れ子構造のページへのリンク