Bruce.です。
davi さんは書きました:
> ちなみに岩波講座 言語の科学9 『言語情報処理』
> http://www.iwanami.co.jp/.BOOKS/00/2/006901+.html ← 表紙あります。
> (長尾真,黒橋禎夫,佐藤理史,池原悟,中野洋 2004/12)の
> pp.24-25にあるクイックソートのアルゴリズムは、以下の
> ように書かれていました。
>
> −−−−−−−−−−−−−−−−−−−−−−−−−
> begin
> quicksort(1,n);
> end
>
> procedure quicksort(first,last);
> begin
> x := data[(first+last)/2];
> i := first;
> j := last;
> repeat
> while data[i] < x do i := i+1;
> while x < data[j] do j := j-1;
> if i ≧ j then goto 1;
> swap(i,j);
> i := i+1; j :=j-1;
> until false;
> 1;
> if first < i-1 then quicksort(first,i-1);
> if j+1 < last then quicksort(j+1,last);
> end
> −−−−−−−−−−−−−−−−−−−−−−−−−
>
> 最初の宣言で関数っぽくしているのが、高級言語っぽさを
> 出していますが、beginで書き始めるのがBASICっぽいです。
>
> で、procedureとかrepeatとかswapとかの謎(?)の
> コマンド名(予約語?)が…。
procedure と repeat は予約語ですね。swapは本の別のところで登場している
ユーザー定義手続きでしょう。
> 「〜以上」は、「>=」とか「=>」とかではなく「≧」と
> 全角で書かれていました。
これは書籍に載せる(疑似)プログラムですから、見栄えの面でそうしたのでしょう。
TeXでも自動的にやってくれなかったっけ?
>
> あと、個人的には until false;の直後の 1; が意味不明です。
> 何かのフラグ立てとして使っているんですか?
1;じゃなくて、1:じゃないですか?
#後ろがコロン
おそらくループから脱出するときのラベルです。
インデントがちょっとおかしいですが
> repeat
> while data[i] < x do i := i+1;
> while x < data[j] do j := j-1;
> if i ≧ j then goto 1;←ループの終了
> swap(i,j);
> i := i+1; j :=j-1;
> until false; ← repeat に対応
> 1;←gotoの指定先
repeat 〜 until ほげほげ
で、ほげほげが「真」になるまで繰り返しですが、上の例では until false なので
無限ループになっていて、抜けるときはswapの手前のif文の判定が真になったと
きと。
> でもでも、こういう、どこかに代入されるようには見えない
> ものを、いきなり1と宣言するってことは、この例文には、
> 何らかの暗黙のルールがあり、それが事前に説明されていない、
> ってことになりますよね?
>
> # 確かに、「対象読者:こどもから大人まで」って書いてないけどさ…。
>
> その下の2行文のif文も、その上にある2行文のwhile文で
> 吸収できそうな無駄な記述っぽい雰囲気が漂っているように
> 感じます。
それは大いに勘違いです。
--
木村浩一/KIMURA Koichi
I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
mail kbk at kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/index.html