(Translated by https://www.hiragana.jp/)
ALGOL - Wikipedia コンテンツにスキップ

ALGOL

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
ALGOL 60から転送てんそう
ALGOL
ALGOL
ALGOLのロゴ
パラダイム 手続てつづがたプログラミング構造こうぞうプログラミング命令めいれいがたプログラミング ウィキデータを編集
登場とうじょう時期じき 1958ねん (66ねんまえ) (1958)
設計せっけいしゃ バウアー英語えいごばんルティシュハウザーサメルソン英語えいごばんバッカスパリスナウアファン・ワインハールデン英語えいごばんマッカーシー
型付かたつ つよ静的せいてき型付かたつ
方言ほうげん ALGOL 60、ALGOL 68
影響えいきょうけた言語げんご FORTRAN ウィキデータを編集
影響えいきょうあたえた言語げんご PascalC言語げんごPL/ISimulaCPLAdaMathematica
テンプレートを表示ひょうじ

ALGOLアルゴル)は、命令めいれいがたプログラミング言語げんごファミリーの1つ[ちゅう 1]名前なまえALGOL」は「アルゴリズム言語げんご」を意味いみする英語えいごalgorithmic language」に由来ゆらいする[1]。1950年代ねんだいちゅうごろに開発かいはつされ、おおくの言語げんご影響えいきょうおよぼし、ACM教科書きょうかしょ学術がくじゅつ論文ろんぶんなどでアルゴリズム記述きじゅつデファクトスタンダードとして30ねん以上いじょう使つかわれた[2]現代げんだいおおくの言語げんごが「ALGOLけい」あるいは「ALGOLふう」(algol-like) とされているという意味いみ[3]、ほぼどう世代せだい高水準こうすいじゅん言語げんごである FORTRANLISPCOBOLくらべてもっと成功せいこうしたとうこともできる。FORTRANあきらかとなった問題もんだいふせぐよう設計せっけいされ、BCPLBPascalSimulaCといった様々さまざまなプログラミング言語げんご影響えいきょうあたえた。ALGOLは「beginendかこむ」という構文こうぶんによるブロック構造こうぞう導入どうにゅうし、制御せいぎょ構造こうぞう自在じざいネスト)にできるはつひろまった言語げんごとなった。また構文こうぶん形式けいしきてき定義ていぎ真剣しんけん検討けんとうした最初さいしょのプログラミング言語げんごでもあり、"Algol 60 Report"[4]導入どうにゅうされたバッカス・ナウア記法きほうは、そののコンピュータ言語げんごとう構文こうぶん形式けいしきてき定義ていぎしめ手法しゅほうとして(プログラミング言語げんごだけにかぎられず)定番ていばん記法きほうとなっている。

おもなバージョン

[編集へんしゅう]

つぎの3つの主要しゅよう仕様しよう存在そんざいする。うしろについているかず最初さいしょ発表はっぴょうされたとしあらわしている。

ALGOL 58英語えいごばん
当初とうしょ IAL (International Algebraic Language) という名称めいしょう提案ていあんされた[5]
ALGOL 60
1960ねんちゅうごろに X1 ALGOL 60 として実装じっそうされたのが最初さいしょで、1963ねん改訂かいていされた[4][6]
ALGOL 68英語えいごばん
1968ねん発表はっぴょうされ、1973ねん改訂かいていされた[7]可変かへん配列はいれつ、スライス、並列へいれつせい演算えんざん識別しきべつ、その拡張かくちょう可能かのう機能きのうなどがあらたに導入どうにゅうされている。

IAL (ALGOL 58) は様々さまざまなプログラミング言語げんご(いわゆるALGOLけい言語げんご)におおきな影響えいきょうおよぼし、一般いっぱんにそれらの先祖せんぞとみなされている。また、ALGOLの仕様しようしめされた中間ちゅうかんコードALGOL object codeばれ、単純たんじゅんでコンパクトなスタックベースの命令めいれいセットアーキテクチャであり、計算けいさん科学かがく分野ぶんやコンパイラ構築こうちく教育きょういく使つかわれ、高水準こうすいじゅん言語げんご実装じっそうにも使つかわれた。

歴史れきし

[編集へんしゅう]

1950年代ねんだい後半こうはんFORTRANひとし言語げんご米国べいこくつくられていたのに対抗たいこうして、ヨーロッパ学術がくじゅつ研究けんきゅうしゃ世界せかい共通きょうつうのプログラミング言語げんごとして開発かいはつした。ALGOLは1958ねんチューリッヒ工科こうか大学だいがくおこなわれた国際こくさい会議かいぎ提案ていあんされたものが起源きげんとされる。現代げんだいのプログラミング言語げんごくらべていちじるしくことなるてんのひとつに、reference syntax、publication syntax、implementation syntax という3種類しゅるい構文こうぶんがある、ということがげられる。当時とうじ文字もじコード標準ひょうじゅん以前いぜんであり、また数学すうがく数式すうしきのように印刷いんさつしたいという要望ようぼうなどもあったため、そのようなことになっている(ちがいは具象ぐしょうちがいであり、抽象ちゅうしょう構文こうぶん共通きょうつうである)。これにより、キーワードめい小数点しょうすうてん使用しようする記号きごう(カンマかピリオドか)をえらぶことなどもできた。

ALGOL 58 はおも欧米おうべい計算けいさん科学かがくしゃアルゴリズム研究けんきゅう開発かいはつもちいた。商用しょうようアプリケーションにはあまり採用さいようされていない。その原因げんいん入出力にゅうしゅつりょく機能きのう標準ひょうじゅん仕様しようふくまれていなかったためであり、またバロース以外いがい大手おおてコンピュータメーカーがこの言語げんご興味きょうみしめさなかったためである。

ジョン・バッカスは ALGOL 58 をしゅたる対象たいしょうとしてプログラミング言語げんご文法ぶんぽう記述きじゅつするバッカス正規せいき記法きほう (Bakus normal form) を開発かいはつした。ピーター・ナウアはそれを ALGOL 60 けに拡張かくちょう改訂かいていドナルド・クヌースバッカス・ナウア記法きほう (Bakus-Naur Form) と改称かいしょうすることを提案ていあんした[8]

ピーター・ナウアは ALGOL Bulletin という学術がくじゅつ編集へんしゅうしゃとしてこの言語げんご国際こくさいてき議論ぎろん参加さんかし、1959ねん11月にヨーロッパの言語げんご設計せっけいグループの一員いちいんえらばれた。そして "Algol 60 Report" の編集へんしゅうしゃとなり、1960ねん1がつにパリで開催かいさいされた ALGOL 60 についての国際こくさい会議かいぎ結果けっか発表はっぴょうした[9]

このパリでの会議かいぎ(1960ねん1がつ1にちから16にちまで開催かいさい)には以下いか人々ひとびと参加さんかしている。

ヨーロッパからの参加さんかしゃ
フリードリッヒ・L・バウアー英語えいごばんピーター・ナウアハインツ・ルティシュハウザークラウス・サメルソン英語えいごばん、Bernard Vauquois、アドリアン・ファン・ワインハールデン英語えいごばん、Michael Woodger
アメリカからの参加さんかしゃ
ジョン・バッカス、Julien Green、Charles Katz、ジョン・マッカーシーアラン・パリス、Joseph Henry Wegstein

アラン・パリスはこの会議かいぎについて、「会合かいごうつかれさせるもので、てしなく、活発かっぱつだった。あるひとのよいアイデアがわるいアイデアととも却下きゃっかされると、そのひと機嫌きげんそこねた。それにもかかわらず、期間きかんちゅうずっと勤勉きんべんさが持続じぞくした。13にん作用さよう素晴すばらしいものだった」とひょうしている。

ALGOL 60 はその多数たすう言語げんご影響えいきょうあたえた。アントニー・ホーアは ALGOL 60 を「時代じだい先行せんこうしていて、それまでの言語げんご改良かいりょうだっただけでなく、そののほぼすべての後継こうけいしゃ先駆せんくしゃとなった言語げんご」とひょうしている[10]SchemeというLisp方言ほうげん設計せっけいしゃは、その静的せいてきスコープは ALGOL からの影響えいきょうだとべている。またSchemeの仕様しよう名称めいしょう "Revised Report on the Algorithmic Language Scheme" もALGOLへのオマージュである[11]

1968ねんには、後継こうけいとして ALGOL 68開発かいはつされた。ALGOL 68 では、2段階だんかい文法ぶんぽうのワインハールデン記法きほう文法ぶんぽう記述きじゅつされた。ALGOL 60 の後継こうけい言語げんご制定せいていいたるまでの候補こうほとしてニクラウス・ヴィルトALGOL W日本にっぽん設計せっけいされた ALGOL N ひとしもあったが最終さいしゅうてきALGOL 68 が後継こうけいとして制定せいていされた。しかし、あまりに複雑ふくざつかつ巨大きょだい仕様しようのため ALGOL 68 コンパイラの実装じっそうむずかしく、またワインハールデン記法きほう難解なんかいなこともあり実用じつようてきには、ほとんど普及ふきゅうしなかった。そのためたんに ALGOL とった場合ばあいにはALGOL 68 ではなくて ALGOL 60 やその方言ほうげんすのが一般いっぱんてきである。

言語げんご標準ひょうじゅんとしては、IFIP TC2/WG2.1 において ALGOL 60 が制定せいていされた。その遅々ちちとして標準ひょうじゅん作業さぎょうはすすまず、1984ねんになって、ISOALGOL 60 相当そうとう言語げんご標準ひょうじゅんされたのみである。日本にっぽんでは、かつて ALGOL 60 の言語げんご規格きかく入出力にゅうしゅつりょくライブラリ規格きかくをそれぞれJIS規格きかく制定せいていしていたが (JIS C 6210-6219)、1983ねん昭和しょうわ58ねん9月1にちづけ廃止はいしされた。

ALGOLとプログラミング言語げんご研究けんきゅう

[編集へんしゅう]

ピーター・ランディン英語えいごばん指摘してきしたように、ALGOLは命令めいれいがた副作用ふくさようと(名前なまえわたの)ラムダ計算けいさん一体いったい結合けつごうしたはつ言語げんごである。この言語げんごもっと見事みごと定式ていしきはおそらくジョン・C・レイノルズ英語えいごばんによるもので、その文法ぶんぽうおよび意味いみろん純粋じゅんすいさをよくあらわしている。レイノルズの「理想りそうした」ALGOLも名前なまえわたしの言語げんごのコンテキストにおける「ローカル」な副作用ふくさよう適切てきせつさについて説得せっとくりょくのある方法ほうほうろんてき主張しゅちょうおこなっており、MLのようなわたしの言語げんご使用しようする「グローバル」な副作用ふくさよう対比たいひされる。ALGOLの概念的がいねんてき完全かんぜんせいにより、PCF英語えいごばんやMLととも意味いみろん研究けんきゅうおも対象たいしょうとされるようになった[12]

実装じっそうれい

[編集へんしゅう]

これまでに ALGOL 60 の強化きょうかばん拡張かくちょうばん派生はせいばん、サブ言語げんごなどがすくなくとも70ほど存在そんざいした[13]

ALGOL 60 の実装じっそうかんする問題もんだいは、Nicholas Enticknap と Pat Woodroffe のいた "The early days of Algol" でくわしく議論ぎろんされている。

ALGOL 60の実装じっそうれい
名称めいしょう とし 作者さくしゃ くに 説明せつめい 対象たいしょうシステム
ZMMD-implementation 1958ねん Bauer, Rutishauser, Samelson, Bottenbruch ドイツ ALGOL 58 の実装じっそう Z22
のちツーゼのZ23[14]けに ALGOL 60 コンパイラを提供ていきょうしている)
X1 ALGOL 60 1960ねん8がつ[15] エドガー・ダイクストラ、 Jaap A. Zonneveld オランダ ALGOL 60 の世界せかいはつ実装じっそう[16] Electrologica X1
Elliott ALGOL 1960年代ねんだい アントニー・ホーア イギリス Elliott 803 & Elliott 503
JOVIAL 1960ねん Jules Schwarz アメリカ Ada以前いぜんDOD HOL 各種かくしゅ
Burroughs Algol
(いくつか派生はせいがある)
1961ねん バロース(ホーアやダイクストラ参加さんか アメリカ バロースのメインフレーム(およびユニシス後継こうけいシリーズ)の基盤きばん バロースの大型おおがた
および中型ちゅうがた
Case ALGOL 1961ねん ケース・ウェスタン・リザーブ大学だいがく[17] アメリカ Simulaは Case ALGOL のシミュレーション拡張かくちょうとして開発かいはつされた。 UNIVAC 1107
GOGOL 1961ねん Bill McKeeman アメリカ ODINタイムシェアリングシステム PDP-1
RegneCentralen ALGOL 1961ねん ピーター・ナウア、Jørn Jensen デンマーク ALGOL 60 の完全かんぜん実装じっそう DASK (Regnecentralen)
Dartmouth ALGOL 30 1962ねん トーマス・ユージン・カーツ アメリカ LGP-30
USS 90 Algol 1962ねん L. Petrone イタリア
Algol Translator 1962ねん G. van der Mey, W.L. van der Poel オランダ オランダ国営こくえい電話でんわ会社かいしゃ ZEBRA
Kidsgrove Algol 1963ねん F. G. Duncan イギリス イングリッシュ・エレクトリック KDF9
VALGOL 1963ねん Val Schorre アメリカ META II コンパイラジェネレータのテストとして開発かいはつ
Whetstone 1964ねん Brian Randell, L J Russell イギリス イングリッシュ・エレクトリック KDF9
NU ALGOL 1965ねん ノルウェー UNIVAC
ALGEK 1965ねん ソビエト連邦れんぽう ALGOL 60 とCOBOLもとづいた経済けいざいタスクよう Minsk-22
MALGOL 1966ねん publ. A. Viil, M Kotli & M. Rakhendi エストニア・ソビエト社会しゃかい主義しゅぎ共和きょうわこく Minsk-22
ALGAMS 1967ねん GAMS(中型ちゅうがたのための自動じどうプログラミング)グループとコメコン科学かがくアカデミーの共同きょうどう開発かいはつ コメコン Minsk-22のちES EVMBESM
ALGOL/ZAM 1967ねん ポーランド ZAM(ポーランドせい
Simula 67 1967ねん オーレ=ヨハン・ダールクリステン・ニゴール ノルウェー ALGOL 60 にオブジェクト指向しこう導入どうにゅう UNIVAC 1107
Chinese Algol 1972ねん 中国ちゅうごく 漢字かんじ表示ひょうじ可能かのう
DG/L 1972ねん データゼネラル アメリカ Eclipseファミリ
S-algol 1979ねん Ron Morrison イギリス 直交ちょっこうデータがた追加ついか教育きょういく PDP-11のちJava VM うえにも実装じっそう

特徴とくちょう

[編集へんしゅう]

どう時期じきFORTRANCOBOLくらべると、これらの言語げんご特定とくていのハードウェアじょう特定とくてい目的もくてき効率こうりつくこなすための一種いっしゅのドメインとくがた言語げんごからはじまったのにたいし、ALGOL はいったんハードウェアの特性とくせいいておき、抽象ちゅうしょうてきなアルゴリズムを手続てつづきとして記述きじゅつすること目指めざしている。初期しょきALGOL 60 仕様しようでは入出力にゅうしゅつりょく手続てつづきすら標準ひょうじゅんされていなかったてんからても、できるかぎ言語げんごコアの抽象ちゅうしょうげようとしていたことは想像そうぞうかたくない。FORTRANCOBOL直系ちょっけい子孫しそん以外いがいあま枝分えだわかれをしていないのにたいして、ALGOL けいおおきな多様たようせい獲得かくとくしたのもこの抽象ちゅうしょうせいによるところだいえる。したがって ALGOL策定さくていをもって、ソフトウェアのモジュール計算けいさん汎用はんようはじまった瞬間しゅんかんとらえてもつかえないであろう。

ALGOL 60 は、手続てつづがた言語げんごとして再帰さいき可能かのうはじめてのプログラミング言語げんごである。

公式こうしきALGOL 60 では入出力にゅうしゅつりょく機能きのう定義ていぎされていなかったため、実際じっさい処理しょりけいではそれぞれに互換ごかんせいのない方法ほうほう実装じっそうされた。それにたいして、ALGOL 68では transput[ちゅう 2]のための豊富ほうふライブラリ提供ていきょうされた。

ALGOL 60 では引数ひきすうわたしに2種類しゅるい評価ひょうか戦略せんりゃく定義ていぎされている。一般いっぱんてきわたALGOL特徴とくちょうてき名前なまえわたである。名前なまえわたしは実際じっさいのところ、手続てつづがた言語げんごではあつかいがかなりむずかしい。たとえば、2つの引数ひきすうえる手続てつづきをいたとき、ある整数せいすう変数へんすうとその整数せいすう変数へんすうとする配列はいれつ要素ようそをその引数ひきすうとしてわたすことができない[18]。すなわち swap(i, A[i]) という場合ばあいである(くわしくは引数ひきすう#名前なまえわた参照さんしょう)。乱数らんすう関数かんすうわた場合ばあいにも問題もんだいしょうじる。

しかし、ALGOLの設計せっけいしゃ名前なまえわたしをデフォルトとした。また、言語げんご処理しょりけい実装じっそうしゃたちは名前なまえわたしの実現じつげんThunk(サンク)英語えいごばんという興味深きょうみぶか技法ぎほうした。現在げんざい素朴そぼくな(ALGOLのような)名前なまえわたしは完全かんぜんすたれたが、サンクは遅延ちえん正格せいかく評価ひょうか実装じっそうする一般いっぱんてき手法しゅほうとしてられる。ドナルド・クヌース処理しょりけいが「再帰さいき局所きょくしょてき参照さんしょう」をただしく実装じっそうしているかを評価ひょうかするman or boy test英語えいごばん考案こうあんした。このテストには名前なまえしのれいふくまれている(クヌースらはほかにも、名前なまえわたしの「悪用あくよう」とでもうべきJensen's Device英語えいごばんのちばれるようになるような技法ぎほういちれいしめした "ALGOL 60 Confidential"[19]など、仕様しようのコーナーケースをあばき、コンピュータ・プログラミング言語げんご設計せっけいむずかしさをあらわにした)。

ALGOL影響えいきょうとして、言語げんごのうちのもっとおおくに影響えいきょうがあるものは、BEGIN/END(C 言語げんごなどでは{ })のによるブロック構造こうぞう、つまりのような典型てんけいてきかたち記法きほうであろう。

 BEGIN
   X := 1 ;
   IF (X > 0) THEN
     BEGIN
       :
     END
 END

ぞくに「ALGOL 文法ぶんぽう」といった場合ばあいは、このブロック構造こうぞう記法きほうのことをしていることがある(C言語げんごのように記号きごう使つかうものもふくめてしていることもあれば、そうではなくてBEGIN/ENDのようにキーワードを使つかう、という意味いみっていることもある)。静的せいてきスコープ言語げんごについても、ALGOLからの影響えいきょうわれることがある。

れい移植いしょくせい問題もんだい

[編集へんしゅう]

コードれい比較ひかく

[編集へんしゅう]

つぎのコードは ALGOL 60 で n × m の2次元じげん配列はいれつなかから絶対ぜったい最大さいだい要素ようそもとめ、その絶対ぜったいyに、ik格納かくのうする手続てつづきを記述きじゅつしたものである。なお、コードちゅう強調きょうちょう表示ひょうじされている予約よやく記法きほう処理しょりけい依存いぞんする。たとえば "INTEGER" は "integer" とかれることもある(ストロッピング英語えいごばん)。

 PROCEDURE Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k) ;
     VALUE n, m ; ARRAY a ; INTEGER n, m, i, k ; REAL y ;
 COMMENT The absolute greatest element of the matrix a, of size n by m
     is transferred to y, and the subscripts of this element to i and k ;
 BEGIN
     INTEGER p, q ;
     y := 0 ; i := k := 1 ;
     FOR p := 1 STEP 1 UNTIL n DO
         FOR q := 1 STEP 1 UNTIL m DO
             IF abs (a[p, q]) > y THEN
                 BEGIN
                     y := abs (a[p, q]) ;
                     i := p; k := q
                 END
 END Absmax

つぎれいは Elliott 803 ALGOL[20]ひょう生成せいせいする方法ほうほうしめしたものである。

 FLOATING POINT ALGOL TEST'
 BEGIN REAL A,B,C,D'
 
 READ D'
 
 FOR A:= 0.0 STEP D UNTIL 6.3 DO
 BEGIN
   PRINT PUNCH(3),££L??'
   B := SIN(A)'
   C := COS(A)'
   PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
 END'
 END'

PUNCH(3) はかみテープのさんこう装置そうちではなくテレタイプ端末たんまつのプリンターへ出力しゅつりょくおくるものである。SAMELINE は引数ひきすうあいだ通常つうじょうおこなわれる復帰ふっき改行かいぎょう抑制よくせいする。ALIGNED(1,6) は出力しゅつりょく小数点しょうすうてん以上いじょうを1文字もじ小数点しょうすうてん以下いかを6文字もじとするようフォーマットする。

つぎのコードれいうえ掲の ALGOL 60 のコードれいの ALGOL 68 はんである。

ALGOL 68 でも ALGOL 60 のストロッピング英語えいごばんさい利用りようしている。

 PROC ABS max = ([,]real a, REF real y, REF int i, k)real:
 COMMENT The absolute greatest element of the matrix a, of size ⌈a by 2⌈a
 is transferred to y, and the subscripts of this element to i and k; COMMENT
 BEGIN
    real y := 0; i := ⌊a; k := 2⌊a;
    FOR p FROM ⌊a TO ⌈a DO
      FOR q FROM 2⌊a TO 2⌈a DO
        IF ABS a[p, q] > y THEN
            y := ABS a[p, q];
            i := p; k := q
        FI
      OD
    OD;
    y
 END # abs max #

なお、lower (⌊) と upper (⌈) は配列はいれつ境界きょうかいしめし、配列はいれつ走査そうさするさい範囲はんい指定してい使つかえる。

 floating point algol68 test:
 (
   real a,b,c,d;
   
   printf(($pg$,"Enter d:"));
   read(d);
   
   FOR step FROM 0 WHILE a:=step*d; a <= 2*pi DO
     printf($l$);
     b := sin(a);
     c := cos(a);
     printf(($z-d.6d$,a,b,c))
   OD
 )

printf はファイル stand out出力しゅつりょくおくる。printf($p$);あらためぺーじprintf($l$);改行かいぎょうである。printf(($z-d.6d$,a,b,c))小数点しょうすうてん以上いじょうを1けた小数点しょうすうてん以下いかを6けたにフォーマットして出力しゅつりょくする。

Hello world の変遷へんせん

[編集へんしゅう]

ALGOLの各種かくしゅ実装じっそうにおける移植いしょくせいさは、Hello World プログラムで簡単かんたんしめすことができる。

ALGOL 58 (IAL)

[編集へんしゅう]

ALGOL 58 には入出力にゅうしゅつりょく機能きのう存在そんざいしないので、例示れいじできない。

ALGOL 60 ファミリ

[編集へんしゅう]

ALGOL 60 にも入出力にゅうしゅつりょく機能きのうがないので、Hello World プログラムの移植いしょくせいはない。以下いかしめすのはユニシスのメインフレームでいま使用しよう可能かのうなALGOLの実装じっそう対応たいおうしたもので、ミシガン大学だいがくThe Language Guide にあるコードれい単純たんじゅんしたものである[21]

 BEGIN
   FILE F(KIND=REMOTE);
   EBCDIC ARRAY E[0:11];
   REPLACE E BY "HELLO WORLD!";
   WRITE(F, *, E);
 END.

インラインフォーマットを使つかったさらに単純たんじゅんなプログラムはつぎのようになる。

 BEGIN
   FILE F(KIND=REMOTE);
   WRITE(F, <"HELLO WORLD!">);
 END.

Displayぶん使つかうとさらにつぎのように単純たんじゅんされる。

 BEGIN DISPLAY("HELLO WORLD!") END.

もう1つのれいとして Elliott Algol のコードれいしめす。Elliott Algol は引用いんよう開始かいし符号ふごう引用いんよう終了しゅうりょう符号ふごうとでことなる文字もじ使用しようする。

 program HiFolks;
 begin
    print ‘Hello world’;
 end;

つぎは Elliott 803 Algol (A104) のれいである。Elliott 803 は標準ひょうじゅんでは5あなかみテープを使用しようするので、大文字おおもじしか使つかえない。引用いんようとして使つかえる文字もじもないため、ポンド記号きごう (£) を引用いんよう開始かいし疑問符ぎもんふ (?) を引用いんよう終了しゅうりょう使用しようしている。特殊とくしゅシーケンスはじゅう引用いんようないかれる(たとえば、££L?? は改行かいぎょう指示しじである)。

  HIFOLKS'
  BEGIN
     PRINT £HELLO WORLD£L??'
  END'

ICT 1900シリーズのALGOLでは、かみテープまたはパンチカードを入力にゅうりょくとして利用りよう可能かのうである。かみテープは小文字こもじ使用しよう可能かのうである。出力しゅつりょくはラインプリンターにたいしておこなう。

  'BEGIN'
     'WRITE TEXT'("HELLO WORLD");
  'END'

ALGOL 68 のコードは一般いっぱん太字ふとじまたは下線かせんつきの小文字こもじ予約よやくあらわす(ただし、以下いかれいはシンタックスハイライトのために大文字おおもじにしている)。

 BEGIN
   printf(($gl$,"Hello, world!"))
 END

"Algol 68 Report" では、入出力にゅうしゅつりょくを "transput" としょうしている。

ALGOLの特殊とくしゅ文字もじ変遷へんせん

[編集へんしゅう]

ALGOLは文字もじセットが急速きゅうそく発展はってん多様たようしていた時代じだい登場とうじょうした。また、ALGOLは大文字おおもじだけで記述きじゅつできるよう定義ていぎされていた。

1960ねん情報処理じょうほうしょり国際こくさい連合れんごう (IFIP) で発表はっぴょうされた ALGOL 60 では、当時とうじのほとんどのコンピュータではサポートされていない数学すうがく記号きごうがいくつか使つかわれていた。たとえば、×, ÷, ≤, ≥, ≠, ¬, ∨, ∧, ⊂, ≡, ␣, [ちゅう 3] などである。

1961ねん9がつ初期しょきASCII文字もじセットが登場とうじょうし、ALGOLのブーリアン演算えんざん "\/" と "/\" をサポートするためにバックスラッシュ (\) が初期しょき段階だんかい追加ついかされた[22]

1962ねんALCOR英語えいごばんは2つのめずらしい文字もじ、"᛭" (iron/runic cross) と "⏨" (Decimal Exponent Symbol) を浮動ふどう小数点しょうすうてん形式けいしき使用しようするためにALGOLの文字もじセットにくわえた[23][24][25]

1964ねん、ソビエト連邦れんぽう策定さくていしたGOST規格きかく GOST 10859 で、ALGOLようの4ビット、5ビット、6ビット、7ビットの文字もじセットを定義ていぎした[26]

1968ねんの "Algol 68 Report" では既存きそんのALGOLよう文字もじセットにくわえて、IBM 2741 はしまつ(1965ねん登場とうじょうしたAPL対応たいおう端末たんまつ)で使用しよう可能かのう→, ↓, ↑, □, ⌊, ⌈, ⎩, ⎧, ○, ⊥, ¢ という文字もじくわえた。このレポートはロシア、ドイツフランス語ふらんすご、ブルガリア翻訳ほんやくされ、それぞれの言語げんごけに文字もじセットが拡張かくちょうされた。たとえばソビエト連邦れんぽうBESM-4キリル文字もじ使用しよう可能かのうだった。ALGOLの使用しようするすべての文字もじUnicode規格きかく一部いちぶになっており、そのだい部分ぶぶん主要しゅようフォント対応たいおうしている。

2009ねん10がつ浮動ふどう小数点しょうすうてん形式けいしき記述きじゅつのための "" (Decimal Exponent Symbol) が Unicode 5.2 に追加ついかされた[ちゅう 3]。これはブラン使つかわれたALGOLソフトウェアとの後方こうほう互換ごかんたもつためである。

脚注きゃくちゅう

[編集へんしゅう]

注釈ちゅうしゃく

[編集へんしゅう]
  1. ^ ファミリーめい大文字おおもじ/小文字こもじをまじえて表記ひょうきされる場合ばあい (Algol 60) と、すべ大文字おおもじ表記ひょうきされる場合ばあい (ALGOL 68) がある。ほん項目こうもくでは ALGOL統一とういつする。
  2. ^ ALGOL 68 の用語ようご入出力にゅうしゅつりょく意味いみする。
  3. ^ a b 対応たいおうフォントがすくない。フリーフォントでは、DejaVu Sans、Quivira、Symbola和田わだけん2004フォントの絵文字えもじ対応たいおうばん、にしきてきフォントなど。JIS X 0208の表記ひょうきえるなら「10」のような外見がいけんとなる。

出典しゅってん

[編集へんしゅう]
  1. ^ P.HAYES 1978, p. 38.
  2. ^ Collected Algorithms of the ACM ACMによるアルゴリズムしゅう
  3. ^ Algol-like languages ,Introduction” (September 1996). 2012ねん1がつ17にち閲覧えつらん
  4. ^ a b Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K. et al. (May 1960). Naur, Peter. ed. Report on the Algorithmic Language ALGOL 60. Copenhagen. doi:10.1145/367236.367262. ISSN 0001-0782 
  5. ^ Perlis, A.J.; Samelson, K. (1958), “Preliminary report: international algebraic language”, Communications of the ACM 1 (12): 8-22, doi:10.1145/377924.594925 
  6. ^ Revised Report on the Algorithmic Language Algol 60” (1963ねん). 25 June 2007てんオリジナルよりアーカイブ。2007ねん6がつ8にち閲覧えつらん
  7. ^ Revised Report on the Algorithmic Language ALGOL 68” (1973ねん). 2010ねん8がつ25にち閲覧えつらん
  8. ^ Knuth, Donald E. (1964). “Backus Normal Form vs Backus Naur Form”. Communications of the ACM 7 (12): 735–736. doi:10.1145/355588.365140. 
  9. ^ ACM Award Citation / Peter Naur, 2005
  10. ^ "Hints on Programming Language Design", C.A.R. Hoare, December 1973. Page 27. (なお、この言葉ことば間違まちがってエドガー・ダイクストラのものとされることがある。ダイクストラも ALGOL 60 コンパイラ実装じっそう参加さんかしていた)
  11. ^ Jonathan Rees and William Clinger (Editors), Hal Abelson, R. K. Dybvig et al.. “Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60)”. 2009ねん10がつ20日はつか閲覧えつらん
  12. ^ Peter O'Hearn and Robert D. Tennent. 1996. Algol-Like Languages. Birkhauser Boston Inc., Cambridge, MA, USA.
  13. ^ The Encyclopedia of Computer Languages”. 2012ねん1がつ20日はつか閲覧えつらん
  14. ^ Computer Museum History, Historical Zuse-Computer Z23, restored by the Konrad Zuse Schule in Hünfeld, for the Computer Museum History Center in Mountain View (California) USA
  15. ^ Daylight, E. G. (2011). “Dijkstra's Rallying Cry for Generalization: the Advent of the Recursive Procedure, late 1950s – early 1960s”. The Computer Journal. doi:10.1093/comjnl/bxr002. http://www.dijkstrascry.com/node/4. 
  16. ^ Kruseman Aretz, F.E.J. (30 June 2003). “The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1”. Software Engineering. History of Computer Science. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica. http://oai.cwi.nl/oai/asset/4155/04155D.pdf 
  17. ^ Koffman, Eliot. “All I Really Need to KnowI Learned in CS1”. 2012ねん5がつ20日はつか閲覧えつらん
  18. ^ Aho, Alfred V.; Ravi Sethi, Jeffrey D. Ullman (1986). Compilers: Principles, Techniques, and Tools (1st ed.). Addison-Wesley. ISBN 0-201-10194-7 , Section 7.5, and references therein
  19. ^ https://doi.org/10.1145/366573.366599
  20. ^ "803 ALGOL", the manual for Elliott 803 ALGOL
  21. ^ Hello world! ALGOL Example Program page
  22. ^ How ASCII Got Its Backslash, Bob Bemer
  23. ^ Baumann, R. (October 1961). “ALGOL Manual of the ALCOR Group, Part 1 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen: 206–212. 
  24. ^ Baumann, R. (December 1961). “ALGOL Manual of the ALCOR Group, Part 2 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen 6: 259–265. 
  25. ^ Baumann, R. (April 1962). “ALGOL Manual of the ALCOR Group, Part 3 [ALGOL Manual of the ALCOR Group]” (German). Elektronische Rechenanlagen 2. 
  26. ^ GOST 10859 standard”. 16 June 2007てんオリジナルよりアーカイブ。2007ねん6がつ5にち閲覧えつらん

参考さんこう文献ぶんけん

[編集へんしゅう]

関連かんれん図書としょ

[編集へんしゅう]
  • 森口もりぐち繁一しげかずへん):「ALGOL入門にゅうもん」、日本にっぽん科学かがく技術ぎじゅつ連盟れんめい、(1962ねん10がつ1にち)。
  • Eric Foxley and Henry R. Neave:"A FIRST COURCE IN ALGOL60", Addison-Wesley Pub., (1968).
  • エリック フォクスレイ、ヘンリイ R.ニーヴ、岸田きしだ孝一こういちわけ):「プログラミングALGOL入門にゅうもん」、日本にっぽん生産せいさんせい本部ほんぶ(1970ねん3がつ30にち)。

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]