ここでは,サンプルプログラムを例に取って,プログラムの一連の流れを学びます.
みなさんがプログラムを書く時には,次の様な流れで行います.
プログラムを作成するためには,まずソースコードを書く必要があります. ソースコードとは,人が理解できるような形で記述したテキスト文書です. ソースコードのサンプル ソースコードは,"ソース"と略される事があります.
ソースを書いたら次にコンパイルを行います. コンパイルとは,人が理解できるソースを,コンピュータが理解できる言葉に変換することです. 言い換えると,ソースをコンパイルすることによって,コンピュータが実行可能なファイルを作成できます.
最後にコンパイルによって作成されたファイルを実行することで,プログラムが動きます.
それぞれの流れを詳しく見ていきましょう.
では,手初めに次のソースを写してみましょう.一字一句間違わずに書くように気を付けて下さい.数字は半角でも全角でもかまいません.また,行末の読点は「。」と「.」が使えます.
100歩進む. 右に90度回転する. 100歩進む.
先程書いたソースをコンパイルすると,コンソールエリアにコンパイルの結果が出力されます. 末行に「コンパイル成功」と表示されていた場合は,コンパイルが成功しています. 表
「コンパイル成功」と表示されない場合は,コンパイルエラーが表示されます. 表 コンパイルエラーとは,ソースをコンピュータが理解できる言葉に変換できないことを言います. コンパイルエラーは,言霊の記法と間違ったソースを書くことが原因で起こります.
図のコンパイル失敗の例では,「100進む」が解釈できないことを伝えています. 正しくは,「100歩進む」です.
コンパイルの成功 | コンパイルの失敗 |
---|---|
コンパイルによって作成されたファイルを実行すると,プログラムが起動します.
ここでは,色々なプログラムを書くことによって,プログラム作成の流れを身に付けます.また,ソースの間違いと直し方について学びます.
それでは,先ほどのプログラムを次の様に書き変えてみましょう.
ソースコードは次のようになります.
100歩進む. 右に90度回転する. 100歩進む.
それでは,正方形を描いてみましょう.完成すると図の様にプログラムが実行されます.
それでは,順を追って長さ100の正方形を描いてみます.
ソースは次の様になりますね.ソースをコンパイルして,成功したら実行してみて下さい.
100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する.
それでは,次の図形を描いてみましょう.
四角形は「右に90度回転する」と書きましたが,三角形の場合は「右に120度回転する」ですね.
四角形と三角形を組み合わせることで家が描けます.
ここでは,くり返し文の使い方を学びます.くり返し文は,同じプログラムの処理を数回くり返す時に使われます.くり返し文によって,読みやすいプログラムになります.
前回に四角形を描きましたが,「100歩進む」と「右に90度回転する」という文を4回記述しました.くり返し文を使うことによって,この2つの文を4回くり返すことができます.
4回だけ{ 100歩進む. 右に90度回転する. }を行う.
このように,くり返し文を使うことによって,より簡潔にソースが書けます.
くり返し文を使って,色々な図形を描いてみましょう.
長さ70,角度は72度(72=360/5)のプログラムです.
長さ70,角度は60度(60=360/6)のプログラムです.
長さ7,角度は6度(6=360/60)のプログラムです. 実は,60角形ほどになると円のようになります.
長さ100の星形のプログラムです. 星形の鋭角は36度です.
ここでは,複数の文をまとめる方法と,まとめた文をもう一度よび出す方法を学びます.複数の文をまとめたものをメソッドと呼びます.
それでは,四角形を描くソースをメソッドで表しましょう. メソッドには名前を付けます. ここでは,「四角形を描く」というメソッド名にしましょう. メソッドにしたソースは次のようになります.
四角形を描くとは{ 100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する. 100歩進む. 右に90度回転する. }である.
ここでソースをコンパイルして実行して下さい. 実行しても何を起きません. 四角形を描くメソッドを定義したものの,四角形を描く命令を出していないからです. そこで次の行に「四角形を描く.」と記述して下さい. すると,四角形が描かれます.
メソッドを作るときには,まず「メソッドを定義」することが必要です. ソースでは,メソッドの定義しかしていませんでした. メソッドの定義だけでは,実行結果として何も起こりません. メソッドの定義の後に「メソッドの呼び出し」をする必要があります. これで初めて,定義したメソッドを実行することができます.
それでは,色々な図形をメソッドにしてみましょう.
家を描くには,次のように進めると良いでしょう.
言霊のプログラムは複数の文から成り立ちます. 次はプログラムの例です.
100歩進む. 右に30度回転する.
このように複数の文を書き並べると,順番通りに実行されます. この記述では亀が100歩進み,右に30度回転します.
文の一般的な構造をBNFで書くと、以下のようになります。
<文> :== <名詞句>*<動詞><句点> <名詞句>:== <名詞><助詞> <読点> :== 。|.|.|。例えば以下のプログラムの場合は、名詞・助詞・動詞がそれぞれ図のようになります。
また、ひとつの文において名詞句の順番が入れ代わっても文の意味は同じです. 以下のプログラムは、どちらも全く同じ意味になります。
右に30度回転する. ※ どちらも 30度右に回転する. ※ 同じ動作になる。
ソースコードにおいてプログラムとして処理されない記述をコメントといいます. コメントはプログラムの意味の説明や,未完成なプログラムを補うことに利用されます.
コメントには行コメントと複数行コメントがあります. 行コメントはコメント以下の文字から文末の文字をコメントとして扱います. 複数行コメントはコメント以下に含まれた範囲をすべてコメントとして扱います.
# # ※
≪ ≫ 【 】 『 』
言霊では以下の手続きを使ってタートルを操作できます。
それぞれの具体的な使い方を解説します。
亀を移動させるには、進む手続きを使います。進む手続きは2種類の書き方があります。
距離 歩進む。
距離 だけ進む。
2種類の書き方があるのは、距離の表現が定数のときと変数のときで文章表現が変わるからです。以下の例を見てみましょう。
※距離が定数のときの表現 100歩進む。 ※距離が変数のときの表現 距離は整数型である。 距離に100を入れる。 距離だけ進む。
亀の向きを変えるには、回転する手続きを使います。(1)
回転する手続きは4種類の書き方があります。
右に 角度 だけ回転する。
左に 角度 だけ回転する。
右に 角度 度回転する。
左に 角度 度回転する。
進む手続きと同様に、回転するが4種類あるのも表現の問題です。以下の例を見てみましょう。
※角度が定数のときの表現 右に90度回転する。 ※角度が変数のときの表現 角度は整数型である。 角度に90を入れる。 右に角度だけ回転する。
タートルを使っているといずれ「線を描かずに移動する方法は無いのか」という疑問にあたります。この疑問を解決するのが以下の二つの手続きです。
筆を上げる。
筆を下げる。
点線を描くプログラム例を以下に示します。
10回だけ{ 5歩進む。 筆を上げる。 5歩進む。 筆を下げる。 }を行う。
プログラムにおけるもっとも基本的な概念が変数です。変数とは、データを格納することが可能な箱のことです。 言霊はJavaやCなどのプログラム言語と同じく、変数を使用する前に宣言をする必要があります。 変数の名前と型をコンパイラに対して知らせるためです。
変数宣言は以下のように記述します。
名前 を 型 とする。
変数への代入は以下のように記述します。
名前 に 値 を入れる。
値 を 名前 に入れる。
言霊で使用できる型は、整数型と文字列型の2つだけです。 以下でそれぞれの変数宣言や代入について説明します。
整数の変数宣言と代入は以下のように行います。
番号は整数型である。 番号に100を入れる。
整数値の範囲は0〜32767まで(2)です。
また、整数の表現に使用できる文字は半角・全角の数です。(3)(4)(5)
0123456789 0123456789
文字列の変数宣言と代入は以下のように行います。
氏名は文字列型である。 氏名に「言霊太郎」を入れる。
文字列値は、以下の括弧で囲むことができます。
「 」 “ ”
2種類の括弧が使えることで、以下のような記述が可能になります。
開き括弧Aは文字列型である。 閉じ括弧Aは文字列型である。 開き括弧Aに「“」を入れる。 閉じ括弧Aに「”」を入れる。 開き括弧Bは文字列型である。 閉じ括弧Bは文字列型である。 開き括弧Bに“「”を入れる。 閉じ括弧Bに“」”を入れる。
言霊では計算する為に4つの手続きが用意されています。(8)
それぞれを使ったプログラム例を以下に示します。
数値は整数型である。 数値に100を入れる。 数値を10だけ増やす。 ※数値の中身が110になる。 数値を20だけ減らす。 ※数値の中身が90になる。 数値に5を掛ける。 ※数値の中身が450になる。 数値を9で割る。 ※数値の中身が50になる。
それぞれの一般形は以下の通りになります。
変数 を 数値 だけ増やす。
変数 を 数値 だけ減らす。
変数 に 数値 を掛ける。
変数 を 数値 で割る。
四角形を描いて見ましょう。
100歩進む。 右に90度回転する。 100歩進む。 右に90度回転する。 100歩進む。 右に90度回転する。 100歩進む。 右に90度回転する。
四角形程度ならこれでも問題ないのですが、100角形(円)を描くときにはとても記述していられません。似たようなことを繰り返して実行するために、言霊では繰り返す手続きを用意しています。(9)
繰り返す手続きは以下のように記述します。
回数 回だけ 複文 を繰り返す。
整数 が 整数 と等しい限り 複文 を繰り返す。
整数 が 整数 と等しくない限り 複文 を繰り返す。
整数 が 整数 より大きい限り 複文 を繰り返す。
整数 が 整数 より小さい限り 複文 を繰り返す。
先ほどのプログラムを書き直すと、以下のようになります。
4回だけ{ 100歩進む。 90度右に回転する。 }を繰り返す。
同じプログラムを以下のように表現することもできますね。
回数は整数型である。 回数に0を入れる。 回数が4と等しくない限り{ 100歩進む。 右に90度回転する。 回数を1だけ増やす。 }を繰り返す。
手続きの宣言について解説します。以下では「引数無し動詞宣言」「定型引数有り動詞宣言」「引数有り動詞宣言」の3種類が説明されています。(10)
引数を持たない動詞の宣言は,以下のように記述される.
※動詞の宣言 書くとは{ 100歩進む. 右に90度回転する. }である. ※動詞の実行 書く。
引数が無い動詞を宣言するときの一般形は,以下のようになる.
動詞名 とは 複文 である。
先の例だと「書く」動詞には1つの処理しか割り当てることが出来ません.実際は様々な「書く」の処理を割り当てたいと考えることがあるでしょう.
そこで定型表現の引数を使った動詞の宣言を紹介します.
※動詞宣言 三角形を書くとは{ 100歩進む.右に120度回転する. 100歩進む.右に120度回転する. 100歩進む.右に120度回転する. }である. ※動詞宣言 四角形を書くとは{ 100歩進む.右に90度回転する. 100歩進む.右に90度回転する. 100歩進む.右に90度回転する. 100歩進む.右に90度回転する. }である. ※宣言した動詞の実行 三角形を書く. 四角形を書く.
定型表現とは,上の例では「三角形」と「四角形」のことを指します.書く動詞に対して「三角形を」「四角形を」という引数を与えてやると,それに応じて処理を変化させます.
定型表現を使った動詞宣言の一般形をBNFで書くと,以下の通りです.
<定型表現> :== <文字列> <引数> :== <定型表現><助詞> <動詞宣言> :== <引数>*<動詞名>とは<複文>である。
普通の引数を取る動詞宣言は,以下のようになります.
※動詞宣言 長さが距離(整数型)の三角形を書くとは{ 距離だけ進む.右に120度回転する. 距離だけ進む.右に120度回転する. 距離だけ進む.右に120度回転する. }である. ※宣言した動詞の実行 長さが100の三角形を書く.
動詞宣言の一般形は,以下のようになります.
<引数> :==<仮引数>|<定型引数> <定型引数>:==<定型表現><助詞> <仮引数> :==<引数名>(<型名>)<助詞> <動詞宣言>:==<引数>*<動詞名>とは<複文>である.
動詞宣言で使用可能な助詞の一覧を以下に示します.(11)
は が を に で と の 度 歩 から とは なら 限り だけ より