hpprc/jawiki-books-paragraphs huggingface dataset:
難解プログラミング言語の作り方/ちょっとコーヒーブレイク(1) Esolang wikiに投稿してみよう
3つも言語を作ってしまったので、ちょっと休憩しましょう。
Esolang wikiって何ですか

Esolang wikiは、いろいろな人が作った難解プログラミング言語を投稿するWikiです。Wikipediaと同じものを使っているので、Wikipediaの執筆ができればスタイルは問題なしです。
Esolang wikiって何ですか

ただもう一つ問題があります。それは言語の壁です。Esolang wikiは英語で書かれています。英語が書けるのであれば全く問題ありませんが、英語がわからなければ一大事です。
Esolang wikiって何ですか

...とまあいろいろおどかしましたが、世界は情報社会です。翻訳があります。やりました!
Esolang wikiって何ですか

ほかにも、英語が書けないので説明を書けないひとは、説明を書かずにソースコードのリンクをのせておくのもよいでしょう。GithubやGoogle Driveなどです。それを見たほかのユーザーが書き足してくれるかもしれません。実体験です。
Esolang wikiって何ですか

節の名前によく出てくる書き方をいくつか載せておきます。また、ページを書かない人も知っておけば読みやすくなるかもしれません。特に目次。
Esolang wikiって何ですか

概要です。
Esolang wikiって何ですか

この言語を使ったソースコードのサンプルを載せておく節です。Hello, worldやQuine(クワイン)など。
Esolang wikiって何ですか

実装とかいう意味です。Cとかで書かれたソースコードが書いてあります。
Esolang wikiって何ですか

こちらもご覧ください、という意味です。類似言語や元にした言語など、関連のあるページをリストにしましょう。
Esolang wikiって何ですか

外部ソースという意味です。wikiの外のサイトを貼りたいときはSee alsoではなくこちらへ。
Brainfuck
概要

Brainfuckは、 Urban Müllerによって1993年に開発された難解プログラミング言語です。
概要

P"やFALSEに影響を受けました。また、膨大な数の難解プログラミング言語に影響を与えた言語です。
概要

拡張子は、「.b」もしくは「.bf」です。
概要

fuckが卑語であるため、様々な別名があります。それを以下に示します:
概要

このように、様々な別名のせいで、情報を探すことが困難になっていたりします。
仕様

Brainfuckは以下のもので成ります:
仕様

Brainfuckは、8つの命令を持ちます。命令は以下の通りです:
仕様

また、命令でない文字は無視されます。
Hello world

Brainfuckにおけるハローワールドプログラムを以下に示します。
実装

Brainfuckを利用するには、ソフトウェアをインストールするほかに、ブラウザで実行する方法があります。以下はその一例です。
JavaScript/字句構造
大文字小文字の区別

JavaScriptは大文字と小文字を区別します。つまり、Hello()はHELLO()やhello()、さらにはhEllo()とは同じではありません。
ホワイトスペース

ホワイトスペースとは、余分なインデント、改行、スペースのことです。JavaScriptでは無視されますが、コードを読みやすくするために使われます。
ホワイトスペース

以下は、ホワイトスペースがほとんどないJavaScriptです。
ホワイトスペース

以下は、同じJavaScriptに典型的な量のホワイトスペースを加えたものです。
ホワイトスペース

以下は、同じJavaScriptを空白を多くして表示したものです。
コメント

コメントを使うと、他の人がコードを理解しやすいようにコードにメモを残すことができます。また、パーサーからは隠したいが削除したくないコードをコメントアウトすることもできます。
コメント

JSDocは、JavaScriptのコード内にドキュメンテーションコメントを記述するためのツールです。JSDocを使用することで、JavaScriptの関数やクラス、メソッドなどのドキュメンテーションを自動化し、ドキュメント生成ツールなどで出力することができます。
コメント

JSDocは、以下のような形式でコメントを記述します。
コメント

また、関数やメソッドの引数や戻り値の型を指定することもできます。
コメント

このように、JSDocを使用することで、コード内に自己完結的なドキュメンテーションを記述することができます。また、JSDocに対応したドキュメント生成ツールを使用することで、簡単に読みやすいドキュメントを生成することができます。
コメント

以下は、クラス構文を使わずに複素数クラスを作成する例です。JSDocを使用して、コードの意味を説明します。
コメント

このコードでは、Complexという関数を定義しています。この関数は、realとimagという2つの引数を受け取り、それらをプロパティとして持つオブジェクトを返します。また、Complexのプロトタイプに、add、sub、mul、absといったメソッドを定義しています。
コメント

それぞれのメソッドには、JSDocで説明を追加しています。例えば、addメソッドには、引数としてComplex型のオブジェクトを受け取り、戻り値としてもComplex型のオブジェクトを返すということを示す@paramと@returnsが含まれています。
コメント

このようにJSDocを使用することで、コードの意味を明確にすることができます。
セミコロン

多くのコンピュータ言語では、各コード文の最後にセミコロンが必要です。JavaScriptではセミコロンの使用は任意で、改行することで文の終わりを示します。これはセミコロンの自動挿入と呼ばれるもので、そのルールはかなり複雑です。 セミコロンを省きパーサーが自動的にセミコロンを挿入するようにすると複雑な問題が生じます。
セミコロン

上記のコードは、2つのステートメントとして解釈されません。2行目に括弧があるため、JavaScriptは上記を以下のように解釈します。
セミコロン

と解釈するのではなく、次のように解釈することを意図していたのかもしれません。
セミコロン

セミコロンは任意ですが、誤解を招かないためにも文の最後にはセミコロンを付けるのが望ましいです。
リテラル

リテラルとは、ハードコードされた値のことです。リテラルはスクリプトの中で特定の値を表現する手段となります。例えば代入の右辺には次のようなものがあります。
リテラル

リテラルにはいくつかの種類があります。最も一般的なのは文字列リテラルですが、他にも整数や浮動小数点のリテラル、長整数のリテラル、配列やブーリアンのリテラル、オブジェクトリテラルなどがあります。
リテラル

オブジェクトリテラルの例
リテラル

これらの型の詳細については、変数で説明しています。
識別子

識別子とは、変数、配列、関数などのデータの一部を表す名前です。ルールがあります。
識別子

有効な識別子の例です。
識別子

1A2B3Cは数字で始まっているため、無効な識別子です。
識別子

変数の名前をつけるにあたって、いくつかのルールがあります。
JavaScript/セミコロンの自動挿入
セミコロンの自動挿入（Automatic Semicolon Insertion; ASI）

C言語系言語では、セミコロン(;)は文の終わりを表します。他のC言語系言語とは異なり、JavaScriptでは文の最後にセミコロンを使用することを強制していません。その代わり、セミコロンは任意でありJavaScriptのインタープリタがコードを実行する際に「インテリジェントに」追加します。
セミコロンの自動挿入（Automatic Semicolon Insertion; ASI）

JavaScriptでは、次のような場合にセミコロンが自動的に挿入されます。
セミコロンの自動挿入（Automatic Semicolon Insertion; ASI）

ASIはコードを書きやすくしますが(セミコロンをすべて入力する必要はありません)、実際には、セミコロンがないとプログラムのデバッグが難しくなります。このため、ステートメントの最後にセミコロンを使用することはベスト・プラクティスとして広く認識されています。しかし、ASIの存在は何を探すべきかを知らなければトラブルシューティングが困難ないくつかのバグを作り出す可能性があります。
セミコロンの自動挿入（Automatic Semicolon Insertion; ASI）

最初のケースでは、プログラマは 2*a + 1 を返すことを意図していましたがコードは何も返しませんでした。同様に、2番目のケースではプログラマは中括弧{}で囲まれた行を返すことを意図していましたが、コードは何も返しませんでした。このように、JavaScriptには奇妙な点があるため文の中で改行したり開始波括弧を別の行にしたりしないことがベスト・プラクティスとされています。
JavaScript/予約語
この章では、変数や関数などの名前として使用できない、JavaScriptの予約語の一覧を掲載しています。
予約語の種類

ECMAScript の規格では、予約語(Reserved Words)を以下の四種類に分類しています(ES1当時)。
JavaScript/文法
JavaScriptの文法には他のプログラミング言語との類似点と相違点があります。以下にいくつかの重要な点を挙げてみましょう。
これらの相違点は、JavaScriptが異なる用途に使用されるための柔軟性を提供しています。ウェブ開発、サーバーサイド開発、モバイルアプリケーション開発など、さまざまなコンテキストで JavaScript が使用されています。
JavaScript/予約語/break
break

breakはループ文やswitch文を直ちに中断します。 ループ文やswitch文以外でbreakを使おうとすると SyntaxError となります。 ここで言うループは、while文、do文、for文、for-in文、for-of文のいずれかです。 Array.prototype.forEachの様な反復メソッドからの脱出にはbreakは使えません。
break

実行結果
JavaScript/予約語/continue
continue

continueキーワードは、ループ文を直ちに中断し、あたかもループが最後まで終了したかのように開始行に進み、for文の場合は第三項を評価します。 ループ文以外でcontinueを使おうとすると SyntaxError となります。 ここで言うループ文は、while文、do文、for文、for-in文、for-of文のいずれかです。 Array.prototype.forEachの様な反復メソッドにはcontinueは使えません。
continue

実行結果
JavaScript/予約語/for
キーワード for

キーワードforは、異なる四種類の反復構文で使われます。
キーワード for

for文は、C言語風の反復構文です。
キーワード for

while文による等価なプログラム
キーワード for

外側のブロックは、初期化式がブロックスコープを持つ変数の宣言であった場合 for文 を抜けるとスコープから出ることを表現した。
キーワード for

実行結果
キーワード for

for...in文は、文字列をキーとするオブジェクトのすべての列挙可能なプロパティを反復処理します。
キーワード for

変数がブロックスコープで宣言された場合、変数はfor...in文を抜けると揮発します。
キーワード for

実行結果
キーワード for

for...of文は、String、Array、TypedArray、Map、Setと配列似なオブジェクト(例えば、ArgumentsやNodeList)、ユーザー定義の反復可能オブジェクトを反復するループを作成します。このループはオブジェクトの各プロパティの値に対して実行されるステートメントを持つカスタム反復フックを呼び出します。
キーワード for

変数がブロックスコープで宣言された場合、変数はfor...of文を抜けると揮発します。
キーワード for

実行結果
キーワード for

for await... of文は、非同期イテレート可能なオブジェクトや同期反復可能なオブジェクトを反復するループを作成します。これらのオブジェクトには、String、Array、TypedArray、Map、Setと配列似なオブジェクト(例えば、ArgumentsやNodeList)、ユーザー定義の反復可能オブジェクトが含まれます。オブジェクトの各プロパティの値に対して実行される文を持つカスタム反復フックを呼び出します。for await... of文は、非同期関数の内部でのみ使用できます。。
キーワード for

変数がブロックスコープで宣言された場合、変数はfor await...of文を抜けると揮発します。
キーワード for

実行結果
農地法第20条
法学>コンメンタール>コンメンタール農地法
条文

(借賃等の増額又は減額の請求権)
Fortran/なぜFortranを学ぶのか？
Fortran(フォートラン)は科学コミュニティで広く利用されるプログラミング言語で、高速かつ移植性があり、配列や並列処理をスムーズに扱えます。 最初期の高水準言語の一つで、パンチカードや紙テープを使用してプログラムをエンコードする初期のバージョンは広く知られています。 Fortranの名前は「FORmula TRANslation」の略で、数学的な表現を低水準のアセンブリ言語よりも簡単に実現できることを示しています。 Fortran90より古いバージョンは、しばしばFORTRANと綴られます。 Fortranは今でも数値天気予測、物理学や化学のモデリング、応用数学、および他の高性能コンピューティング目的で広く利用されています。 Fortranは豊富な数学ライブラリと科学的なコードベースを備えており、新しい標準では現代的な機能が追加されつつも、完全な後方互換性が保たれています。
この本は、現代のFortranでコードを書くのを支援することを意図しています。 適切な場合には、古いバージョンと現代の標準との使用方法の違いが強調されます。 これは FORTRAN 77などの古いバージョンで書かれた重要なコードベースが存在するためです。
Fortranの特徴

以上が、Fortranの主な特徴です。数値計算や科学技術計算などの分野で広く使用されており、高い性能と効率性を提供しています。
他の言語が適している場合

Fortranは非常に冗長で、静的型付けされたコンパイル言語です。他の動的型付けおよびインタープリター言語よりも書くのに、コンパイルするのに、およびデバッグするのに時間がかかる場合があります。
他の言語が適している場合

Fortranを置き換えることができる言語には、主に次のようなものがあります。
他の言語が適している場合

これらの言語は、Fortranと同様の数値計算や科学技術計算のニーズを満たすことができますが、各言語にはそれぞれ特徴や適用範囲があります。選択する際には、プロジェクトの要件や開発者の経験、コミュニティのサポートなどを考慮することが重要です。
Fortran/歴史
Fortranは、1957年にIBMのJohn Backusを中心としたチームによって作られました。当初、名前はすべて大文字で書かれていたが、現在の標準や実装では最初の文字だけを大文字にします。 Fortran という名前は、FORmula TRANslation の略です。当初は科学計算に特化していたため、文字列の扱いが非常に限定的であり汎用プログラミング言語として重要な他の機能が欠けていたが、成功裏にデビューした後の大規模な開発によって後に達成されることになる。Fortranは、C言語が普及するまでは、異なるコンピュータシステム間で適度な移植性を持つ数少ない高級言語の一つでした。いくつかのウェブサイトによると、Fortranの開発は1954年に開始され、1957年に商業的にリリースされたようです。小さなFORTRANプログラムのコンパイルに初めて成功したのは、1954年9月20日のことだと考えられています。
Fortranにはいくつかのバージョンがあります。FORTRAN I、II、III、IVは時代遅れであり、多くの機械依存機能が含まれていました。FORTRAN 66は最初の標準化されたバージョンで、1966年にリリースされました。それ以降のすべてのFortranのバージョンは、標準規格がリリースされた年にちなんで番号が付けられています。最も一般的に使用されているFortranのバージョンは、FORTRAN 77、Fortran 90以降です。
Fortranは早くから標準化された言語でしたが、多くの企業が独自の拡張を行っていました。不思議なことに、IBMとDECはほとんど同じ拡張機能を持っていました。
バージョン間の相違点

大文字のFORTRANは、FORTRAN66、FORTRAN77と呼ばれる1950年代から開発され使われてきたクラシックな数値計算言語です。新規にプログラムを開発するには、上記の小文字のFortranが推奨されます。 Fortran95になって、FORTRANのいくつかの機能が削除されました。
バージョン間の相違点

削除された機能の一例
Fortran/Hello world
簡単なFortranプログラム

以下は簡単なFortranのプログラムです。
簡単なFortranプログラム

Fortranは大文字と小文字を区別しないので、最初のプログラムは次のようにこともできます。
簡単なFortranプログラム

このプログラムでは、大文字小文字を区別されるのは、print文の引用符で囲まれた部分("Hello World!")だけです。
コンパイル・実行環境

上のコラムで紹介した「オンラインのコンパイル・実行環境」には、次のような特性があります。
コンパイル・実行環境

短所か問題になる場合は、自らコンパイル実行環境を構築することで解決する必要があります。
環境構築

g95, flang などいくつかのオープン・ソース・ソフトウェアの Fortran 言語処理系がありますが、ここでは GNUプロジェクトのGCC(GNU Compiler Collection)のFortranフロントエンド gfortran を紹介します。
環境構築

OnlineGDB でも、gfortran-11.3.0 が使われています。
環境構築

ディストリビューションにより、パッケージマネージャとパッケージ体系に違いがありますが、
環境構築

いく通りかの方法がありますが、MSYS2環境にMinGW64の一部として、gfortran をインストールする方法を紹介します(MSYS2のインストール方法については、項を改めて紹介します)。
環境構築

MSYS2/MinGW64のパッケージマネージャは、Arch Linux 由来の pacman(1) です。
環境構築

環境が構築できたら、コンパイラーのバージョンを確認します。
環境構築

上の例は、Windows 11 上の MSYS2 / MinGW64 上の、gfortran-10.3.0です。環境によって gfortran のコマンド名に prefix や suffix か付く場合があります。
環境構築

例えば、FreeBSDでは複数のバージョンのGCCパッケージが共存できるようバージョンごとにsuffixが付き gfortran12 の様なコマンド名になります。
環境構築

テキストエディタなどで hello.f90 を用意し、
環境構築

コマンドラインから、
環境構築

とすると、ソースコード hello.f90 から 実行形式 hello をコンパイルします(WinowsやOpenVMSでは、 .EXE の様な拡張子が暗黙に追加されるかもしれません)
環境構築

gfortran ではデフォルトでFORTRAN 77規格を使用します(FORTRAN 77標準で使用されている固定形式のフォーマットが要求される)。 このため、自由形式のフォーマットを有効にするには、ソースファイルの拡張子を .f90(またはそれ以降の規格)のにして、コンパイラが希望する規格を自動的に推測できるようにしなければなりません。ほかにも、コマンドラインから -ffree-form オプションをコンパイラに渡すことでソースファイルの拡張子が .f でも自由形式のフォーマットを有効にすることができます。
基本情報技術者試験/午前試験免除制度
当ページ「基本情報技術者試験/午前試験免除制度」はまもなく削除される予定です。理由は以下の通りです。
削除に同意されないのであれば、方針などを確認して、ページを適切なものに書き換えた上で、このテンプレートを取り除いてください。勝手に取り除いた場合、投稿ブロックされる恐れがあります。
基本情報技術者試験の午前試験免除制度に関するコンテンツです。
概要

国家資格の情報処理技術者試験の一区分である基本情報技術者試験(FE)には通常、午前試験と午後試験があり、2科目ともに基準点(満点の60%)以上の点数を取ることが合格の条件となっています。 しかし、試験を開催している独立行政法人情報処理推進機構(IPA)が認定した講座を受講し、その後、修了試験(修了認定に係る試験)に合格することで、基本情報技術者試験(FE)の午前科目の受験が免除される特典が存在します。午前試験が免除となるのは、原則、修了認定日から1年間(本試験2回分)です。 免除対象となる講座の多くは情報処理関係の専修学校(専門学校)で開講されていますが、一部の大学や高等学校、職業能力開発短期大学校、企業などにも開講されている場合があります。 なお、この制度はあくまで講座を修了した人だけに与えられる特典です。「本試験の午前で基準点以上だったが、午後が基準点未満だった」という場合の科目合格制度ではないため、注意が必要です。 午前試験免除制度は2005年度(平成17年度)から導入されています。
修了試験

修了認定に係る試験は6月第2日曜日、7月第4日曜日、12月第2日曜日、1月第4日曜日の年4回実施されますが、一つの講座を受講した後、修了試験を受講できるのは2回までです。2回とも合格できなかった場合は再度講座を受講し直す必要があります。 修了試験の形式は以下の通りです。本試験の午前とほぼ同じですが、本試験に比べて過去問からの出題が多いので、難易度は本試験の午前よりやや低いと言われています。修了試験の問題はIPAが作成・提供します。
民間資格の活用

以下の民間検定試験に合格した人も、FEの午前試験免除制度の講座を受講することができます。その際、履修する項目数は通常の講座よりも少なくなります(検定試験合格によって一部の項目が習得済みとみなされるため。)。また、検定試験合格後に受講する講座を差分講習とも言います。なお、これは構造改革特別区域における特例処置として認められているものです。
民間資格の活用

このうち、サーティファイの情報処理技術者能力認定試験の2級または2級第一部の合格者は、IPAが提供する修了試験とは別に、サーティファイが提供する修了試験を受験することが可能です。 サーティファイ提供の修了試験は試験時間60分、問題数全30問となっており、通常の修了試験に比べて大幅に縮小されています。18問以上正解すれば合格です。
制度のメリットとデメリット

午前試験免除制度にはメリットもありますが、反面、デメリットも存在します。
Fortran/変数
はじめに

プログラミングにおいて変数とは、プログラムが変更できるデータの入れ物です。通常、変数を使用する前には、どのようなデータを格納するかの情報を提供するために、変数を宣言します。しかし、Fortranでは暗黙的に変数を作成することができます。 implicitの記述がない場合、i/Iからn/Nまで(inグループ)で始まる宣言されていない変数や引数はintegerとなり、それ以外の宣言されていない変数や引数はrealとなります。
はじめに

多くの人は、宣言せずに変数を使うことを悪習と考えています。もし変数の宣言を強制されたいのであれば、まず :implicit none をコーディングしてください。
一般的な例

通常の変数の例を以下に示します。
一般的な例

以下は、まったく同じことをしていますが、より短く、より古風な形になっています。
一般的な例

メモリのレイアウトを重視する場合は、m(1,1)の後にm(2,1)が続き、m(1,2)は続かないことに注意してください。
一般的な例

変数に値を設定するには、変数を等号の前に置き、等号の後に設定される値を置く。上記の宣言を行うと、以下のような代入が可能です。
一般的な例

変数は、代入の両サイドに現れることができます。右辺が先に評価され、その値に変数が代入されます。
一般的な例

変数はある型から別の型に変換することができますが、C++やJavaのように変数を型付けするのではなく、Fortranでは固有の手続きを使用します。
一般的な例

また、同じことをよりシンプルで古風な形で表現しています。
配列

配列の宣言には2種類の表記法があります。次の例は、integer型で長さ5の配列の表記法を示しています。
配列

多次元配列の場合は、各次元の長さを指定する必要があります。次の例では、5x6の整数行列が長さ(5,6)の2次元配列になっている場合を示しています(ここでも両方の表記をしています)。
配列

配列に実際の値を代入するには、特定の要素・特定の範囲・あるいは配列全体を設定するという複数の選択肢があります。
配列

多次元配列を設定するには、reshapeやshapeコマンドを利用する必要があります。
配列

Fortranでは列メジャーな順序を採用しているため、上の例ではよくわからない行列ができてしまいます。行メジャーの順序では,次の例のように,どの次元で最初にソートするかを order 引数で指定することができます.
Fortran/テキスト入出力
Fortranプログラムは、read文を使用して標準入力またはファイルから読み取り、print文を使用して標準出力に書き込むことができます。write文を使用すると、標準出力またはファイルに書き込むことができます。ファイルに書き込む前に、ファイルをオープンし、プログラマがファイルを参照するためのユニット番号を割り当てる必要があります。write文を使用してデフォルトの出力にステートメントを書き込む場合、構文はwrite(*,*)となります。使い方は以下の通りです。
このコードは、"Hello World!"をデフォルトの出力(通常は標準出力、画面)に書き込みます。これはprint *,ステートメントを使用した場合と同様です。
ファイル出力

ファイル出力のデモとして、次のプログラムはキーボードから2つの整数を読み取り、その整数と積を出力ファイルに書き込みます。
ファイル出力

ファイル "results.txt" にはこれらの行が含まれます。
ファイル出力

デフォルトでは、各printまたはwriteステートメントは新しい行に印刷を開始します。例えば、以下のようになります。
ファイル出力

標準出力に出力します。
ファイル出力

もし、"Hello World!"を1つのprint文に入れていたら、"Hello World!"というテキストが1行に表示されたことになります。
Fortran/プログラムのフロー制御
選択

条件付き実行は、以下の構成のif、then、else文を使って行われます。
選択

else if文はいくつあっても構いません。
選択

論理式を作る際には、以下のような演算子を使うことができます。
選択

注:Fortranの標準では、.EQ.と.NEQ.は論理演算子と一緒に使用できないことになっていますが、一部のコンパイラでは標準が適用されません。
選択

複数のステートメントをチェックする場合は、括弧を使用します。
選択

次のプログラムは、0から1の間の乱数を生成し、それが0から0.3、0.3から0.6、0.6から1.0の間のいずれかであるかどうかをテストします。
選択

IFには2つの興味深い古風な形式があります。
選択

第1の形式では、物事は非常に簡単です。 2番目の形式では、算術式が評価されます。 式が負の数と評価された場合は、最初の文番号で実行が継続されます。 式がゼロと評価された場合、実行は2行目の番号に続きます。 それ以外の場合は、3行目から実行されます。
選択

if ブロックが単一の変数に対する繰り返しのテストで構成されている場合は、select case構成に置き換えることができるかもしれません。たとえば、次のようなコードです。
選択

は次のように置き換えることができます。
選択

Fortranではbreak文は必要ありません。
ループ

反復処理を行うために、Fortranにはdoループがあります。次のループは,1から10までの整数の二乗を表示します. コード中のループさせたい箇所に、下記のようなdo~end do文を挿入します。
ループ

以下のコードのように、exitを使ってループを早期に終了させることができます。このコードでは、整数の二乗を、いずれかの二乗が25を超えるまで表示します。
ループ

ループは入れ子にすることができます。次のコードは、1から10までの整数の累乗2から4を表示します。
ループ

古い形式のDOでは、ループの終わりの行番号が使われます。 以下は同じループで、ラベル1が各ループの最後の行であることを明示しています(複数のループでのラベルの共有は、Fortran95からは禁止されています)。
ループ

旧来の形式を使用する場合、ループはIFまたはGO TO文で終わらせてはならない。1ラベルのアンカーとしてCONTINUE文を使用することができます。
ループ

また、doループを宣言する際には、オプションでインクリメント引数があります。 以下は、2の単位でカウントアップします。2, 4, 6, ...
ループ

doループの引数は数値リテラルである必要はなく、プログラムのどこかで定義されている任意の整数で構いません。first, lastやincrementにはどんな変数名でも構いません。
Fortran/データ型
変数とデータの宣言は、すべての Fortran プログラムユニットの先頭で、実行可能な文の前に行わなければなりません。変数には、メモリ上のサイズを指定する kind があります。kindのパラメータは、コンパイラやプロセッサによって意味が異なる場合がありますので、ご使用のコンパイラのマニュアルで、どのようなkindがあるかを確認してください。
宣言形式

変数を宣言するにはいくつかの方法があります。最近のFortranでは、冗長かつ明示的に宣言するのが主流です。次の例では,kind が8の実数配列を宣言しています(ほとんどのコンパイラでは,これは8バイト長,すなわち倍精度を意味します)。
宣言形式

dimension属性は、タイプアウトするにはかなり長いですが、一行に複数の配列を宣言する場合には、より簡潔になるかもしれません。単一の変数を宣言する場合は、識別子の横に括弧をつけて次元を指定した方が簡潔になるかもしれません。
宣言形式

変数は代入に似た構文で初期化することもできます。
宣言形式

::は、古いバージョンのFortranとの下位互換性のためにオプションです。古いスタイルの宣言では、変数の種類を示すのに*を使います。
宣言形式

さらに、kindを完全に省略して、コンパイラーのデフォルトの種類を使用することもできます。
組込み型

整数型は、符号付き整数値を格納します (すなわち、..., -3, -2, -1, 0, 1, 2, 3, ...)。ほとんどのコンパイラでは、デフォルトのkindでは、整数は4バイトサイズの短整数として格納されます(kind=4)。長整数は通常8バイトである(kind=8)。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
組込み型

論理デ型は、ブーリアン値を格納し、.true.または.false.の値のみを格納できます。ほとんどのコンパイラのデフォルトの論理型はkind=4で、4バイトを占めます。したがって、論理はメモリの点では整数とよく似ていますが、一般的に整数と論理はほとんどの操作で互換性がありません。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
組込み型

実数型は、浮動小数点データを格納します。変数は、科学的な表記法である「仮数」と「指数」としてメモリに格納されます。ほとんどのコンパイラのデフォルトの実数型はkind=4で、4バイトで構成されています。この場合、24ビットが仮数に、8ビットが指数に使用されます。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension (dims)、private、value、external、protected、volatile、intenance (inout)です。
組込み型

すべてのコンパイラは、低精度数と高精度数の少なくとも2種類の実数種類をサポートしています。しかし、規格ではこれらの精度をどのようなサイズにするかは規定されていません。ほとんどのコンパイラは、単精度には32ビット、倍精度には64ビットを使用しています。したがって、多くのコンパイラは、利用可能な高精度を使用するdouble precision実数データ型をサポートしています。しかし、移植性のためには、selected_real_kind組込み関数を使用して、変数の精度に必要なkindパラメータを選択する方がはるかに優れています。
組込み型

数学では、複素数は実数部と虚数部を持つ。Fortranでの複素数は、実数のペア(実数部が先で、虚数部が後)として直角座標に格納されます。複素数のデフォルトのkindは、実数データ型のデフォルトのkindと常に同じです。つまり、kind=4の複素数変数は、kind=4の2つのリアルを含みます。kind=4のリアルが4バイトに相当する場合、デフォルトの複素数変数のサイズは8バイトになります。許可されている属性は、allocatable、intrinsic、public、asynchronous、optional、save、parameter、bind、pointer、target、dim dimension(dims)、private、value、external、protected、volatile、intent(inout)です。
組込み型

すべての算術演算子はどちらか一方に複素数を取ることができます。Fortranは複素数の演算や虚数の特殊な規則を自動的に処理します。
組込み型

エラーを起こす可能性のある関数呼び出しの使用には注意が必要です。例えば、実数-1.0の平方根を取ると、-1は実数の平方根の領域外であるため、エラーになります。複素数の平方根を取る (-1.0,0.0)は、-1が複素数平方根のドメイン内にあるので許される。
組込み型

文字型は、文字列を格納します。キャラクタ変数のデフォルトの種類は通常1で、ASCII文字を表します。種類2は通常、ISO 10646規格の文字を表します。文字変数は、文字列の文字数を指定するkindに加えて、lenパラメータを持つという点でユニークです。通常、1つの文字はメモリ上で1バイトを占めます。これに加えて、文字データ型は配列にすることもできます。
組込み型

古いスタイルの宣言では、kindパラメータはなく、長さパラメータのみです。
定数 (Constants)

式の中に埋め込まれたデータは、リテラルまたは定数と呼ばれます。リテラルは、書き方によって特定のデータ型を持つことができます。例えば、以下の行では、値1は整数です。
定数 (Constants)

以下の表は、リテラル定数の入力方法を示しています。
定数 (Constants)

なお、複素数の括弧表記は、変数には使えません。例えば、(a, b)は無効です。実数の変数を複素数に変換するには、cmplx関数を使用する。
定数 (Constants)

複素数と他の数値を含む表現は、複素数に昇格します。
定数 (Constants)

定数リテラルは単なる無名データ(unnamed data)です。変数も定数になることができます。パラメータ定数は parameter 属性で宣言します。これらの変数は不変であり、宣言後に代入するとエラーになります。また、宣言時には必ず値を指定して初期化しなければなりません。
Fortran/形式と構造
2つの形式

古いバージョンのFORTRANでは、プログラムの形式に厳しいガイドラインがありました。Fortran 90ではこの制限が撤廃され、歴史的な「固定形式」のコードだけでなく、「自由形式」のコードも受け入れられるようになりました。
2つの形式

Fortran 90より前のソースコードは、明確に定義された「固定形式」に従っていました。コメントは1列目に'C'で示され、2~5列目は任意の数値文ラベルのために確保され、6列目の空白でない文字は現在の行が前の行からの続きであることを示し、7~72列目はプログラム文のために利用可能でした。73から80列目は無視され、しばしば行のシーケンス番号が含まれていました。空白行は許されません。このような厳格な形式は、Fortranがバッチ計算とパンチカード入力の時代に開発された結果です。パンチカードをカードリーダーにセットし、73~80列目でソートすれば、プログラムの順序を回復することができます。コンパイラベンダーは、この形式の拡張機能を提供していたが、移植性はほとんどなかった(例えば、タブ文字を6個のスペースと解釈するなど)。
2つの形式

列の位置は重要ですが、ホワイトスペースは重要ではありません。次のプログラムは、固定形式のFortranにおけるホワイトスペースの合法的な使用方法を示しています。
2つの形式

このコードは技術的には合法ですが、読みやすさを維持するために、キーワード、ラベル、データを区切るためにホワイトスペースを使用することが強く推奨されます。
2つの形式

FortranはASCII文字セットが標準化される前に開発され、伝統的にFORTRANコードは全て大文字で書かれてきました。変数名は6文字までとされていましたが、コンパイラベンダーによって拡張されることが多かったようです。
2つの形式

Fortran90以降のソースコードでは、固定列の形式を必要としません。この場合、コマンドはどの列からでも自由に開始できます。また、72カラムの制限も解除されました。これにより、インデントのためのスペースが大幅に増えました。
2つの形式

Fortranは大文字と小文字を区別しません。Fortranは通常、大文字のみをサポートするシステムで使用されていました。実際、この言語自体がFORTRAN(大文字)と呼ばれていました。完全に不要ではありますが、今でもFortranのコマンドをすべて大文字で入力する習慣があります。これは、モノクロのディスプレイや印刷で表示されるソースコードのキーワードを区別するのに便利です。最近では、シンタックスハイライトでこれを置き換えることができます。しかし、古いFORTRANコードと最新のソースコードを視覚的に区別するためには有効です。
2つの形式

空白や空行は、Fortran 90以降では通常問題になりません。例えば、program、function、subroutineのように、ステートメントキーワードとプログラムユニット識別子の間にホワイトスペースを必要とするステートメントもあります。
2つの形式

しかし、C、C++、Javaなどの他の多くの言語とは異なり、行区切り文字「;」は任意であるため、コードの各行はそれぞれの行にとどまることができます。ただし、コマンド区切り文字「;」の使用は推奨されません。
構造

Fortranのプログラムはプログラム単位で構成されています。1つのソースコード・ファイルに複数のプログラム・ユニットを含めることができますが、各プログラム・ユニットを個別のソースコード・ファイルに入れるのが一般的です。最も基本的なプログラムユニットは一連のFortran文で構成され、最後にend文で締めくくられます。
構造

実行可能なプログラムには、必ずメイン・プログラム・ユニットが必要です。例えば、以下は完全なコンパイルおよび実行可能なプログラムです。
構造

しかし、メインのプログラムユニットであることを示すために、programステートメントを使用する方がはるかに明確です。
構造

メインプログラムはセクションに分かれています。最初のセクションは、モジュールのuse文で構成されます。続いて、宣言されていない変数が暗黙的に型付けされるかどうかを制御するimplicit / implicit none文が続きます。続いて、変数、型、インターフェース、プロシージャを宣言する宣言セクションがあります。次にメインプログラムの実行文が来る。最後のセクションは、containsステートメントによって開始される内部サブプログラムです。
構造

プログラムユニットはサブプログラムである場合もあります。プロシージャ(関数やサブルーチン)、ブロックデータ、モジュール、サブモジュールなどがあります。
構造

次のコードは、メインプログラムと関数を示しています。インクリメント関数はメインプログラムの外部にあるため、メインプログラムの4行目に宣言が必要です。
構造

とはいえ、関数のインターフェイスは暗黙的なままです。外部プロシージャを明示的に宣言するには、外部プロシージャの入力と出力をすべて宣言するインターフェイスを使用することができます。この場合、メインプログラムは次のようになります。
構造

内部サブプログラムは、親プログラムユニットの一部であるため、明示的なインタフェースや宣言を必要としません。サブプログラムがプログラムユニットのcontainsセクションに含まれている場合、そのサブプログラムは内部的なものとなります。
無名関数
コンピュータ・プログラミングにおいて、無名関数とは、識別子に束縛されていない関数定義のことです。 無名関数は、高階関数に渡される引数や、関数を返す必要のある高階関数の結果を返すために使われます。 無名関数は、関数型プログラミング言語や第一級関数を持つ他の言語ではどこにでもあり、他のデータ型に対するリテラルと同様に、関数型に対して同じ役割を果たします。
無名関数は、電子計算機が登場する以前の1936年にアロンゾ・チャーチが発明し、すべての関数が無名であるラムダ計算に由来しています。 いくつかのプログラミング言語では、無名関数はキーワードlambdaを用いて導入され、無名関数はしばしば lambdas または lambda abstractions と呼ばれます。 無名関数は、1958年のLisp以来、プログラミング言語の特徴となっており、最近のプログラミング言語では無名関数をサポートするものが増えている。
百人一首
はじめに

百人一首は藤原定家による秀歌撰を基にしてつくられたかるたの一種です。この編纂を京都小倉山で編纂したという由来から小倉百人一首ともいいます。
はじめに

百人一首の内容などについてはw:百人一首に譲ります。ここでは、百人一首のかるたを用いたゲームについて解説します。
かるた

百人一首のカルタを上達するには歌を覚えるのが鉄則です。しかし、いっぺんにすべてを暗記するのは不可能です。効率よく覚えるための方法の一つが決まり字を覚えることです。
かるた

決まり字の基本です。以下の歌は最初の一文字で歌が分かるものです。6つありますが、その最初の文字をとった「む・す・め・ふ・さ・ほ・せ(娘、総干せ)」と覚えましょう。
かるた

普通のカルタ取りとほぼ同じです。
かるた

まず、読み手を一人選び、読み手が読み札をとります。そして、取り札を適当に重ならないようにして散らします。このとき、なるべく公平になるように取り札の頭はバラバラな向きになるようにします。また、お手付きのペナルティも決めておくといいでしょう。一般的には一回休みが多いようです。
かるた

準備ができたら、読み手が歌を読みます。取り手はわかった時点で取り札をとりましょう。同時に何人もが同じ札を押さえた場合には、手が一番下にある人のものです。
かるた

慣れていない場合、なかなか札をとれないかもしれません。その時には、読み手が下の句を繰り返し読むようにしましょう。
かるた

こうして、取り札がすべてなくなったら終了です。順位はとった札の多い順となります。
その他

このゲームでは読み札(絵札)のみを用います。百人一首の内容を覚える必要はありません。
その他

駆け引きなどの「実力」はほとんど必要なく、ほぼ運のみのゲームです。しかし、それゆえに参加者同士の知的・身体的な差に関係なく遊べるので、年齢差の大きいグループや、高齢者、外国人などの日本語の読めない人でも問題なく遊べます。また、ルールがシンプルなのにシーソーゲームとなるために、意外に盛り上がりやすいです。そのため、打ち解けるためのちょっとした遊びにも向いています。ほか、勝ち負けに強くこだわりすぎる子どもに、負けを受け入れるためのソーシャルスキルトレーニングの一環としても向いています。
その他

もちろん、百人一首の歌の内容などにも興味を広げることもできます。
その他

坊主めくりの特徴でもあり、魅力でもあるのはローカルルールが非常に多いことです。そのため、参加者同士のルール確認はしておきましょう。ここでは、よく知られているルールを紹介します。
その他

また、慣れてきたらいろいろとアレンジをしても面白いですよ。
その他

ローカルルールの代表が蝉丸札です。蝉丸札の扱いについては以下のようなルールがあります。
その他

このように、ルールが最も多様なので、蝉丸の扱いは真っ先に確認しておきましょう。
その他

天智天皇、持統天皇、陽成院、光孝天皇、三条院、崇徳院、後鳥羽院、順徳院の8人は天皇札と呼ばれることがあります。この中でも、天智天皇札と持統天皇札は特別扱いされることがあります。
その他

弓を持っている人物を武官札(または弓持ち札)と呼ぶことがあります。該当するのは、参議篁、在原業平朝臣、藤原敏行朝臣、壬生忠岑、参議等、壬生忠見、藤原道信朝臣、藤原基俊の8人ですが、メーカーによっては弓を持っていない場合があります(特に壬生忠見札は弓を持っていないことが多い)。プレイ前に確認しておきましょう。
その他

武官札の扱いには以下のようなものがあります。
その他

などなど。
その他

以上のルールを色々と組み合わせて遊んでみてください。
Minecraft
Minecraft(マインクラフト)は、Mojang studiosが開発しているサンドボックスゲームです。Minecraftは、ブロックでできた世界に自由に建造物を作ったり、自由に冒険したりするゲームです。Minecraftは、2009年に開発が始まり、2011年11月18日に正式版がリリースされました。
ゲームの流れとしては、サバイバルモードでは、世界を冒険してブロックやアイテムを集めていくというものです。最終的にはポータルを使ってジ・エンドへ行き、そこで飛行しているボスである、エンダードラゴンを倒すことが目標にされることが多いですが、基本的に終わりはありません。
Minecraft/ゲームモード
マインクラフトには、以下のようなゲームモードがあります。
ゲームモードの種類

クリエイティブモードは、自由に飛行したり、建築物を作ったりできるモードです。クリエイティブモードには、サバイバルモードのように体力がなく、基本的には死亡することはありません。ブロックやアイテムは、無限に使うことができます。
ゲームモードの種類

サバイバルモードは、冒険したり、モンスターと戦ったりするモードです。体力ゲージがあり、モンスターに攻撃されたり、高い所から落下したりして、体力ゲージがなくなると死亡します。体力ゲージは、食べ物を食べることで回復します。
ゲームモードの種類

ハードコアモードは、サバイバルモードと同じようにプレイできる。しかし、ゲームの難易度がハードであり、さらに一度でも死亡すると、スペクテイターモードで復活するか、ワールドを強制的に削除しなければならなくなります。
ゲームモードの種類

サバイバルモードと同じく体力ゲージがあり、なくなると死亡するモードです。しかし、サバイバルモードと異なり、ブロックを破壊する際にプレイヤーの手で破壊できず、Java版ではCanDestroy NBTタグがある道具でしか破壊できない。Bedrock版の場合は設置や破壊の際に、can_destroy NBTタグや、can_place_on NBTタグが必要となります。
ゲームモードの種類

Java版1.8で追加された、プレイヤーが飛行状態になって、ブロックやエンティティをすり抜けて、移動することができるモードです。エンティティを左クリックすると、そのエンティティの視点に切り替わり、特定のエンティティ(クリーパー、クモ、洞窟グモ、エンダーマン)では、見える視点が変化します。ハードコアモードでは、死亡した際にこのモードで復活できます。
Minecraft/村
村は、オーバーワールドで生成される建造物の一つです。
村について

村は、平原、砂漠、サバンナ、タイガ、ツンドラに生成されます。村には、小さな家や大きな家、畑、肉屋、教会などの建物が生成され、さまざまな職業の村人が住んでいます。また、アイアンゴーレムやネコがスポーンします。
村について

Java版1.14から、バイオームごとに村の建物の外見や構造が、変わるようになりました。
村について

ゾンビの村は、2%の確率で生成されます。この村には、普通の村人は住んでおらず、村人ゾンビがスポーンします。また建物も、丸石が苔むしているなどの違いがあります。
襲撃イベント

Java版1.14で実装された、邪悪な村人が村を襲撃するイベントです。不吉な予感のステータス効果がある際に、村に入ると襲撃イベントが開始される。
Minecraft/ブロック
マインクラフトの世界は、石、土、砂、木などほぼ全て、設置したり破壊したりすることができるブロックで構成されています。マインクラフトの世界を構成しているブロックは、オーバーワールド、ネザー、ジ・エンドでそれぞれ異なっており、それぞれの世界で異なるブロックを入手することができます。入手したブロックは、工作台を使って新しいアイテムやブロックを作ることができます。
Minecraft/バイオーム
マインクラフトの世界では、多数のバイオームによって構成されています。以下は、オーバーワールド、ネザー、ジ・エンドにそれぞれ生成される、バイオームの一覧です。
Java版1.13からは、海に新しいバイオームが追加されました。また、一部のバイオームの名前が変更されました。
Java版1.16からは、ネザーにバイオームの種類が増加しました。
Java版1.18からは、洞窟に新しいバイオームの種類が、追加される予定です。
オーバーワールドのバイオーム

ID:1
オーバーワールドのバイオーム

木が少なく、草がたくさん生えたバイオームです。ウマが出現することがあります。村が生成されることがある、バイオームの一つです。
オーバーワールドのバイオーム

Java版1.15から、ミツバチの巣が生成されることがあります。
オーバーワールドのバイオーム

ID:129
オーバーワールドのバイオーム

ヒマワリがたくさん生えた、平原バイオームです。
オーバーワールドのバイオーム

ID:2
オーバーワールドのバイオーム

砂に覆われ、所々にサボテンが生えているバイオームです。動物はウサギしか出現せず、このバイオームでは、雨が降りません。村が生成されることがあるほか、砂漠の寺院が、生成されることもあります。
オーバーワールドのバイオーム

モンスターである、ハスクが出現します。
オーバーワールドのバイオーム

ID:17
オーバーワールドのバイオーム

砂漠バイオームの丘陵地です。
オーバーワールドのバイオーム

ID:4
オーバーワールドのバイオーム

オークの木がたくさん生えていて、少しだけシラカバの木が生えているバイオームです。このバイオームでは、オオカミが出現します。
オーバーワールドのバイオーム

Java版1.15から、ミツバチの巣が生成されることがあります。
オーバーワールドのバイオーム

ID:18
オーバーワールドのバイオーム

森林バイオームの丘陵地です。
オーバーワールドのバイオーム

旧名称は(Forest Hills)です。
ネザーのバイオーム

真紅の森(climzon_forest)
Minecraft/砂漠の寺院
砂漠の寺院は、オーバーワールドで生成される構造物です。
この構造物について

砂漠の寺院は、砂漠バイオームに生成されます。外見からピラミッドとも呼ばれます。生成される高さがY座標64となるため、構造物の一部が埋まって生成されることがあります。砂漠の寺院には、青色のテラコッタの下に隠し部屋があり、アイテムの入ったチェストがあります。また、隠し部屋には感圧板を踏むと爆発する、TNTの仕掛けがあります。
Swift/非同期処理
async/await (Swift 5.5以降)

Swift 5.7以降(Task.sleep使用可能)
async/await (Swift 5.5以降)

Swift 5.5.x~5.6.x
async/await (Swift 5.5以降)

Swift 5.4.x以前(コールバック関数使用)
Minecraft/クリーパー
クリーパーは、マインクラフトのオーバーワールドにスポーンする、敵対モブです。
この敵対モブについて

クリーパーは、オーバーワールドの明るさレベル7以下の場所にスポーンする、足が4本あり、緑色の体をした敵対モブです。クリーパーは、近くにいるプレイヤーに近づき、プレイヤーとの距離が3ブロックになると、カウントダウンを始め、2秒後に爆発します。爆発する前にプレイヤーが離れた場合、クリーパーはカウントダウンをやめて再び追跡します。プレイヤーがクリーパーに向かって火打石と打ち金を使用すると、クリーパーはその場で爆発します。クリーパーは、他のモブとは異なり声を発しません。
この敵対モブについて

クリーパーを倒すと、火薬が手に入ります。
この敵対モブについて

近くにヤマネコがいる場合、クリーパーはヤマネコから逃げようとします。
この敵対モブについて

クリーパーに雷が当たると、青く光った帯電クリーパーに変化して、爆発力がアップします。特定のモブの近くで爆発して倒したときそのモブの頭が手に入ります。
Minecraft/オーバーワールド
オーバーワールドは、マインクラフトの世界(ディメンション)の一つです。
オーバーワールドについて

オーバーワールドは、リスポーン地点があり、プレイヤーが最初に降り立つディメンションです。オーバーワールドには、平原、砂漠、森林、ジャングルなど多数のバイオームがあり、それぞれのバイオームで異なるブロック、アイテム、構造物があります。またバイオームごとに、異なるモブやモンスターが出現します。黒曜石を使ってポータルを作ると、ネザーに行くことができます。
昼夜サイクル

オーバーワールドには、昼夜サイクルがあり20分で一日が経過します。現実の世界と同じように、日の出になると太陽が昇り、日の入りになると太陽が沈みます。昼は10分間あり、ゾンビやスケルトンは体が燃えてダメージを受けます。夜は7分間あり、世界が暗くなりモンスターがスポーンします。日の出と日の入りは、それぞれ1分30秒間あります。