Powered by SmartDoc

言霊マニュアル
ナナエディタを使ったタートルプログラム

2004.1.30
岡田 健,武田林太郎,川勝名奈恵
NanaEditorProject
crew-info@sfc.keio.ac.jp
https://crew-lab.sfc.keio.ac.jp/projects/kotodama/
言霊は日本語で記述するプログラミング言語です.

目次

言霊をさわってみよう

初めてのプログラム

ここでは,サンプルプログラムを例に取って,プログラムの一連の流れを学びます.

みなさんがプログラムを書く時には,次の様な流れで行います.

  1. プログラムのソースコードを書く

    プログラムを作成するためには,まずソースコードを書く必要があります. ソースコードとは,人が理解できるような形で記述したテキスト文書です. ソースコードのサンプル ソースコードは,"ソース"と略される事があります.

  2. ソースをコンパイルする

    ソースを書いたら次にコンパイルを行います. コンパイルとは,人が理解できるソースを,コンピュータが理解できる言葉に変換することです. 言い換えると,ソースをコンパイルすることによって,コンピュータが実行可能なファイルを作成できます.

  3. プログラムを実行する

    最後にコンパイルによって作成されたファイルを実行することで,プログラムが動きます.

それぞれの流れを詳しく見ていきましょう.

ソースを書く

では,手初めに次のソースを写してみましょう.一字一句間違わずに書くように気を付けて下さい.数字は半角でも全角でもかまいません.また,行末の読点は「。」と「.」が使えます.

ソースサンプル1
100歩進む.
右に90度回転する.
100歩進む.

コンパイルする

先程書いたソースをコンパイルすると,コンソールエリアにコンパイルの結果が出力されます. 末行に「コンパイル成功」と表示されていた場合は,コンパイルが成功しています.

「コンパイル成功」と表示されない場合は,コンパイルエラーが表示されます. コンパイルエラーとは,ソースをコンピュータが理解できる言葉に変換できないことを言います. コンパイルエラーは,言霊の記法と間違ったソースを書くことが原因で起こります.

図のコンパイル失敗の例では,「100進む」が解釈できないことを伝えています. 正しくは,「100歩進む」です.

コンパイルの成功 コンパイルの失敗
コンパイルの成功
コンパイルの失敗

プログラムを実行する

コンパイルによって作成されたファイルを実行すると,プログラムが起動します.

プログラムの実行結果

色々なプログラムを書く

ここでは,色々なプログラムを書くことによって,プログラム作成の流れを身に付けます.また,ソースの間違いと直し方について学びます.

ソースを書き変えてみよう

それでは,先ほどのプログラムを次の様に書き変えてみましょう.

ソースコードは次のようになります.

サンプル2
100歩進む.
右に90度回転する.
100歩進む.

図形を描こう!

それでは,正方形を描いてみましょう.完成するとの様にプログラムが実行されます.

それでは,順を追って長さ100の正方形を描いてみます.

  1. 左の縦線を描く(100歩進む)
  2. 上の横線を描くために右回転する(右に90度回転する)
  3. 上の横線を描く(100歩進む)
  4. 左の縦線を描くために右回転する(右に90度回転する)
  5. 右の縦線を描く(100歩進む)
  6. 下の横線を描くために右回転する(右に90度回転する)
  7. 下の横線を描く(100歩進む)
  8. 開始時の方向に向き直す(右に90度回転する)

ソースは次の様になりますね.ソースをコンパイルして,成功したら実行してみて下さい.

四角形を描くプログラム
100歩進む.
右に90度回転する.

100歩進む.
右に90度回転する.

100歩進む.
右に90度回転する.

100歩進む.
右に90度回転する.

四角

色々の図形を描いてみよう

それでは,次の図形を描いてみましょう.

くり返し

ここでは,くり返し文の使い方を学びます.くり返し文は,同じプログラムの処理を数回くり返す時に使われます.くり返し文によって,読みやすいプログラムになります.

四角形をくり返しで書く

前回に四角形を描きましたが,「100歩進む」と「右に90度回転する」という文を4回記述しました.くり返し文を使うことによって,この2つの文を4回くり返すことができます.

くり返しを使った四角形を描くプログラム
4回だけ{
 100歩進む.
 右に90度回転する.
}を行う.

このように,くり返し文を使うことによって,より簡潔にソースが書けます.

くり返し文を使って書いてみよう!

くり返し文を使って,色々な図形を描いてみましょう.

メソッド

ここでは,複数の文をまとめる方法と,まとめた文をもう一度よび出す方法を学びます.複数の文をまとめたものをメソッドと呼びます.

四角形をメソッドにしよう

それでは,四角形を描くソースをメソッドで表しましょう. メソッドには名前を付けます. ここでは,「四角形を描く」というメソッド名にしましょう. メソッドにしたソースは次のようになります.

メソッドにした四角形
四角形を描くとは{

 100歩進む.
 右に90度回転する.

 100歩進む.
 右に90度回転する.

 100歩進む.
 右に90度回転する.

 100歩進む.
 右に90度回転する.

}である.

ここでソースをコンパイルして実行して下さい. 実行しても何を起きません. 四角形を描くメソッドを定義したものの,四角形を描く命令を出していないからです. そこで次の行に「四角形を描く.」と記述して下さい. すると,四角形が描かれます.

メソッドを作るときには,まず「メソッドを定義」することが必要です. ソースでは,メソッドの定義しかしていませんでした. メソッドの定義だけでは,実行結果として何も起こりません. メソッドの定義の後に「メソッドの呼び出し」をする必要があります. これで初めて,定義したメソッドを実行することができます.

図形をメソッドにしよう

それでは,色々な図形をメソッドにしてみましょう.

言霊文法

ソース構造

プログラムの構造

言霊のプログラムは複数の文から成り立ちます. 次はプログラムの例です.

一般的な言霊プログラムの記述
100歩進む.
右に30度回転する.

このように複数の文を書き並べると,順番通りに実行されます. この記述では亀が100歩進み,右に30度回転します.

文の構造

文の一般的な構造をBNFで書くと、以下のようになります。

<文>  :== <名詞句>*<動詞><句点>
<名詞句>:== <名詞><助詞>
<読点> :== 。|.|.|。				
例えば以下のプログラムの場合は、名詞・助詞・動詞がそれぞれ図のようになります。

文構造解説

また、ひとつの文において名詞句の順番が入れ代わっても文の意味は同じです. 以下のプログラムは、どちらも全く同じ意味になります。

名詞句の順番が入れ代わる例
右に30度回転する. ※ どちらも
30度右に回転する. ※ 同じ動作になる。

コメントの書き方

 ソースコードにおいてプログラムとして処理されない記述をコメントといいます. コメントはプログラムの意味の説明や,未完成なプログラムを補うことに利用されます.

コメントには行コメントと複数行コメントがあります. 行コメントはコメント以下の文字から文末の文字をコメントとして扱います. 複数行コメントはコメント以下に含まれた範囲をすべてコメントとして扱います.

行コメントに使える文字
# # ※
複数行コメントに使える文字
≪ ≫ 【 】 『 』

タートルの操作

言霊では以下の手続きを使ってタートルを操作できます。

それぞれの具体的な使い方を解説します。

線の描き方

亀を移動させるには、進む手続きを使います。進む手続きは2種類の書き方があります。

 

 距離 歩進む。

 距離 だけ進む。

 

2種類の書き方があるのは、距離の表現が定数のときと変数のときで文章表現が変わるからです。以下の例を見てみましょう。

進む手続きの使用例
※距離が定数のときの表現
100歩進む。

※距離が変数のときの表現
距離は整数型である。
距離に100を入れる。
距離だけ進む。

曲がり方

 亀の向きを変えるには、回転する手続きを使います。(1)

回転する手続きは4種類の書き方があります。

 

右に 角度 だけ回転する。

左に 角度 だけ回転する。

右に 角度 度回転する。

左に 角度 度回転する。

 

進む手続きと同様に、回転するが4種類あるのも表現の問題です。以下の例を見てみましょう。

回転する手続きの使用例
※角度が定数のときの表現
右に90度回転する。

※角度が変数のときの表現
角度は整数型である。
角度に90を入れる。
右に角度だけ回転する。
  1. 回転する手続きは、曲がるという名前のほうが良いのではないか、という意見があります。その通りなのですが、今のところ手続き名に「が」が入ると助詞の「が」と判定してしまう問題が存在します。いずれ修正するつもりです。

筆の上げ下げ

タートルを使っているといずれ「線を描かずに移動する方法は無いのか」という疑問にあたります。この疑問を解決するのが以下の二つの手続きです。

 

筆を上げる。

筆を下げる。

 

点線を描くプログラム例を以下に示します。

点線描画のプログラム例
10回だけ{
 5歩進む。
 筆を上げる。
 5歩進む。
 筆を下げる。
}を行う。

変数の宣言と代入

 プログラムにおけるもっとも基本的な概念が変数です。変数とは、データを格納することが可能な箱のことです。 言霊はJavaやCなどのプログラム言語と同じく、変数を使用する前に宣言をする必要があります。 変数の名前と型をコンパイラに対して知らせるためです。

 

変数宣言は以下のように記述します。

 

 名前 を  とする。

 

変数への代入は以下のように記述します。

 

 名前 に  を入れる。

  を 名前 に入れる。

 

言霊で使用できる型は、整数型と文字列型の2つだけです。 以下でそれぞれの変数宣言や代入について説明します。

整数の宣言と代入

整数の変数宣言と代入は以下のように行います。

整数の変数宣言と代入
番号は整数型である。
番号に100を入れる。

整数値の範囲は0〜32767まで(2)です。

また、整数の表現に使用できる文字は半角・全角の数です。(3)(4)(5)

整数表現に使用できる文字一覧
0123456789
0123456789
  1. この半端な値になるのは恥ずかしい理由があります。整数値はJavaバイトコードのbipushあるいはsipushに割り当てるのですが、sipushの範囲は−32768〜32767なのです。言霊はまだマイナス値のサポートをしていないので、この正の範囲のみが整数値の範囲なのです…。早めに修正します。
  2. 整数表現に漢数字(一二三四五六七八九十百千万億…)は使用できません。
  3. 負の整数はサポートしていません。
  4. 小数はサポートしていません。

文字列の宣言と代入

文字列の変数宣言と代入は以下のように行います。

文字列の変数宣言と代入
氏名は文字列型である。
氏名に「言霊太郎」を入れる。

文字列値は、以下の括弧で囲むことができます。

 

「 」 “ ”

 

2種類の括弧が使えることで、以下のような記述が可能になります。

開き括弧Aは文字列型である。
閉じ括弧Aは文字列型である。
開き括弧Aに「“」を入れる。
閉じ括弧Aに「”」を入れる。

開き括弧Bは文字列型である。
閉じ括弧Bは文字列型である。
開き括弧Bに“「”を入れる。
閉じ括弧Bに“」”を入れる。

(6)(7)

  1. CやJavaでは"を表現するために\"などの表記をしますが、言霊ではサポートしていません。
  2. 文字列の連結はサポートしていません。

計算

言霊では計算する為に4つの手続きが用意されています。(8)

それぞれを使ったプログラム例を以下に示します。

値の増減
数値は整数型である。
数値に100を入れる。

数値を10だけ増やす。 ※数値の中身が110になる。
数値を20だけ減らす。 ※数値の中身が90になる。
数値に5を掛ける。   ※数値の中身が450になる。
数値を9で割る。    ※数値の中身が50になる。

それぞれの一般形は以下の通りになります。

 

変数 を 数値 だけ増やす。

変数 を 数値 だけ減らす。

変数 に 数値 を掛ける。

変数 を 数値 で割る。

 

  1. 算術表現はサポートしていません。そのうちサポートします。

制御構造

繰り返し

四角形を描いて見ましょう。

四角形描画
100歩進む。
右に90度回転する。
100歩進む。
右に90度回転する。
100歩進む。
右に90度回転する。
100歩進む。
右に90度回転する。

四角形程度ならこれでも問題ないのですが、100角形(円)を描くときにはとても記述していられません。似たようなことを繰り返して実行するために、言霊では繰り返す手続きを用意しています。(9)

 

繰り返す手続きは以下のように記述します。

 

回数 回だけ 複文 を繰り返す。

整数 が 整数 と等しい限り 複文 を繰り返す。

整数 が 整数 と等しくない限り 複文 を繰り返す。

整数 が 整数 より大きい限り 複文 を繰り返す。

整数 が 整数 より小さい限り 複文 を繰り返す。

 

先ほどのプログラムを書き直すと、以下のようになります。

四角形描画
4回だけ{
	100歩進む。
	90度右に回転する。
}を繰り返す。

同じプログラムを以下のように表現することもできますね。

四角形描画
回数は整数型である。
回数に0を入れる。

回数が4と等しくない限り{
	100歩進む。
	右に90度回転する。
	
	回数を1だけ増やす。
}を繰り返す。
  1. 「繰り返す」だけではなく「行う」というメソッド名も有効です。

条件分岐

手続きの宣言と実行

手続きの宣言について解説します。以下では「引数無し動詞宣言」「定型引数有り動詞宣言」「引数有り動詞宣言」の3種類が説明されています。(10)

  1. 手続きの返り値はサポートしていません。

動詞定義

引数無し動詞宣言

引数を持たない動詞の宣言は,以下のように記述される.

引数が無い動詞の宣言,実行
※動詞の宣言
書くとは{
  100歩進む.
  右に90度回転する.
}である.

※動詞の実行
書く。

引数が無い動詞を宣言するときの一般形は,以下のようになる.

 

動詞名 とは 複文 である。

 

定型引数有り動詞宣言

先の例だと「書く」動詞には1つの処理しか割り当てることが出来ません.実際は様々な「書く」の処理を割り当てたいと考えることがあるでしょう.

そこで定型表現の引数を使った動詞の宣言を紹介します.

定型表現を用いた動詞宣言
※動詞宣言
三角形を書くとは{
	100歩進む.右に120度回転する.
	100歩進む.右に120度回転する.
	100歩進む.右に120度回転する.
}である.

※動詞宣言
四角形を書くとは{
	100歩進む.右に90度回転する.
	100歩進む.右に90度回転する.
	100歩進む.右に90度回転する.
	100歩進む.右に90度回転する.
}である.

※宣言した動詞の実行
三角形を書く.
四角形を書く.

定型表現とは,上の例では「三角形」と「四角形」のことを指します.書く動詞に対して「三角形を」「四角形を」という引数を与えてやると,それに応じて処理を変化させます.

定型表現を使った動詞宣言の一般形をBNFで書くと,以下の通りです.

<定型表現> :== <文字列>
<引数>   :== <定型表現><助詞>
<動詞宣言> :== <引数>*<動詞名>とは<複文>である。

引数有り動詞宣言

普通の引数を取る動詞宣言は,以下のようになります.

定型表現を用いた動詞宣言
※動詞宣言
長さが距離(整数型)の三角形を書くとは{
	距離だけ進む.右に120度回転する.
	距離だけ進む.右に120度回転する.
	距離だけ進む.右に120度回転する.
}である.

※宣言した動詞の実行
長さが100の三角形を書く.

動詞宣言の一般形は,以下のようになります.

<引数>  :==<仮引数>|<定型引数>
<定型引数>:==<定型表現><助詞>
<仮引数> :==<引数名>(<型名>)<助詞>
<動詞宣言>:==<引数>*<動詞名>とは<複文>である.

動詞宣言で使用可能な助詞の一覧を以下に示します.(11)

は が を に で と の 度 歩
から とは なら 限り だけ より

  1. 助詞をこのように定義してあるというのは、具合の悪いものですね。例えば「度」「歩」などは助詞ではなく序数詞だし…。そのうちここらへんを整理します。