対話システム論 第六回 日本語によるプログラミング

対話システム論 第六回
日本語によるプログラミング
政策・メディア研究科
岡田 健
講義概要
なぜ日本語でプログラムか?
情報教育の観点から
プログラミング言語の歴史
これまでの日本語プログラミング言語
日本語プログラミング言語「言霊」
言語仕様
プログラミング入門TAの経験
ここはどう記述するか
分かりますか?
for( int i=0 ; i<6 ; i++ ){
if( ??? ){
rectangle( 30 );
}else{
triangle( 30 );
}
move(40);
}
プログラミング入門TAの経験
やりたい事の表現と、プログラムの表現に
大きな開きがある
記述するべき事が理解できていても、記述方法、
つまり書き方が分からない事がある
ちなみに前ページの正解は
i % 2 == 0
なのですが・・・
プログラミング入門TAの経験
やりたい事の表現がそのままプログラムに
なればいい
日本語でプログラムが書ければいい
if( i % 2 == 0 )
などという表現は
「iを2で割った余りが0ならば」
と書ければいい。
家を描くプログラム例
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{
長さがAの三角形を描く。
長さがAの四角形を描く。
}
長さが「A(整数型)」の三角形を描くとは{
30度右に曲がる。
{A歩進む。120度右に曲がる。}を3回繰り返す。
30度左に曲がる。
}
長さが「A(整数型)」の四角形を描くとは{
{90度右に曲がる。A歩進む。}を4回繰り返す。
}
ソフトウェアの20世紀(http://www.shoeisha.com/book/pc/20c/)
プログラミング言語の歴史
プログラムの本質とは、可読性・拡張性・
堅牢性・再利用性などである。
プログラム言語の使命は、これらの質を高
める記述ができる言語を提供する事。
プログラミング言語の歴史とは、プログラ
ムを読みやすくする歴史でもある
プログラミング言語の歴史
機械語の時代
大昔のプログラミング言語は、機械よりの
表現をしていた
523 SUBAB 100 200 300 TRPL 500
最初の523は命令の存在するアドレスで、具体的な処理は、
1. 100番地の値から200番地の値を減じ、その結果を300
番地にセットする
2. 300番地の符号を調べ、結果が正なら500番地に制御を移す
という、加算・代入と条件分岐命令となっている。
Speedcordingという1953年当時の言語。
プログラミング言語の歴史
機械語の時代
仮に 2*3+4 を計算するとしたら?
200 SET 100 2
201 SET 101 3
202 MUL 100 101 102
203 SET 103 4
204 ADD 102 103 104
100番地に2を入れる。
101番地に3を入れる。
100番地と101番地を掛けて
102番地に結果を入れる。
103番地に4を入れる。
102番地と103番地を足して
104番地に結果を入れる。
プログラミング言語の歴史
FORTRAN
*** 長方形の面積の計算 ***
WRITE(*,*) '長方形の面積の計算'
WRITE(*,*) '縦の長さ?'
READ(*,*) FLEN
WRITE(*,*) '横の長さ?'
READ(*,*) WIDTH
AREA=FLEN*WIDTH
WRITE(*,*) AREA
END
FORTRANは、数
式を直感的に記述
する事ができる、
最初のプログラミ
ング言語だった
可読性
記述性
プログラミング言語の歴史
FORTHとMIND
FORTRAN以後、様々なプログラミング言
語が登場しました。
APL,COBOL,PASCAL,BASIC,C
後置記法を用いた言語FORTHと、
その日本語化であるMINDを説明します。
プログラミング言語の歴史
FORTH
数式は一般的には中置記法で記述し、
機械語では後置記法に変換される
2*3+4
SET
SET
MUL
SET
ADD
100 2
101 3
102
103 4
105
2 3 * 4 +
プログラミング言語の歴史
FORTH
FORTHは、最初から後置記法で記述が
できる言語だった
FORTH記述
4+2
4–2
4*2
4/2
n = q + 128;
n = q - 64;
n = q * 32;
n = q / 16;
42+
42–
42*
42/
q @ 128 + n !
q @ 64 - n !
q @ 32 * n !
q @ 16 / n !
プログラミング言語の歴史
FORTH
4 2 + を計算する場合
2
4
4
4
2
をス
取タ
りッ
出ク
しか
計ら
算2
すと
る4
6
+
プログラミング言語の歴史
FORTH
2 4 2 + 3 * + を計算する場合
これは 2+(4+2)*3 と同じ。
2
4
4
2
2
2
2
4
2
2
と
4
を
計
算
3
+
6
6
2
2
3
3
と
6
を
計
算
*
18
2
18
と
2
を
計
算
+
20
プログラミング言語の歴史
FORTH
FORTHは日本語の語順で記述されている
4 2 +
4に2を足したもの
3 2 + 2 *
3に2を足したものに2を掛ける
プログラミング言語の歴史
MIND
FORTHの語順に着目して、FORTHを日
本語化したものがMINDである。
4に 2を 加えたものを 数値表示する
3に 2を 加えたものに 2を 掛けて 数値表示する
プログラミング言語の歴史
MIND
MINDではひらがなを無視する事で、
言葉を抜き出す
4に 2を 加えたものを 数値表示する
4 2 加 数値表示
プログラミング言語の歴史
MIND
MINDは、後置記法が日本語の語順と同
じである事に着目した
FORTHを日本語化することで、日本語と
して読みやすい言語を作る事に成功して
いる
これまでの日本語プログラミング言語
既存のものとして、以下のものがある
MIND
ドリトル
ひまわり
TTS
これまでの日本語プログラミング言語
MIND
FORTHを日本語化した言語で、日本語プ
ログラミング言語として最も実績がある
五目並べプログラムのメイン部分
連珠開始処理して
ここから
一回勝負して 勝敗を表示して 両者の勝ち回数を表示して
連珠再挑戦?
でなければ 打ち切り
つぎに
繰り返して
連珠終了処理する
これまでの日本語プログラミング言語
ドリトル
学校教育を想定して作られた、オブジェクト指向言語
カメ太=タートル!作る 2 線の太さ。
カメ子=タートル!作る 1 線の太さ。
カメ蔵=タートル!作る 3 線の太さ。
カメ太!ペンなし -350 -150 位置 ペンあり。
カメ子!ペンなし -350 -50 位置 ペンあり。
カメ蔵!ペンなし -350 100 位置 ペンあり。
タイマー!作る 0.1秒 間隔 700回 回数「|n|
x=(n-350).
波1=(sin(x*19)*30).
波2=(sin(x*20)*30).
カメ太!(x)(-150+波1)位置。
カメ子!(x)(-50+波2)位置。
カメ蔵!(x)(100+波1+波2)位置。
」実行。
これまでの日本語プログラミング言語
ひまわり
最近登場している言語
「いくらですか?」と、尋ねる。
税込価格は、それ×1.05。
「税込価格は、{税込価格}円。」と、言う。
FOR I=1 TO 10
FOR J=1 TO 10
MsgBox I & J
NEXT
NEXT
Iを、1から、10まで、繰り返す(
Jを、1から、10まで、繰り返す(
(I&J)と、言う。
)。
)。
これまでの日本語プログラミング言語
TTS
最近登場している言語
’あいさつプログラム
「初めまして TTSです。よろしくね」を表示
答え$は 入力$(あなたの名前は?)
さようなら}{答え$}{さんを表示
’ファイルのコピー
フォルダ D:\バックアップ\を作って
C:\My Documents\書類\*.*をD:\バックアップへコピーしろ
日本語プログラミング言語「言
霊」
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
メインとは{
亀(亀型)を生成する。
亀が大きさ100の四角形を描く。
}
「亀(亀型)」が大きさ「A(整数型)」の四角形を描くとは{
{ 亀がA歩進む。
亀が90度右に曲がる。 }を4回繰り返す。
}
「言霊」の特徴
当てはめ型の言語である
下記の宣言を見ると
~が大きさ~の四角形を描く
という手続きを宣言して使用している
メインとは{
亀(亀型)を生成する。
亀が大きさ100の四角形を描く。
}
「亀(亀型)」が大きさ「A(整数型)」の四角形を描くとは{
{ 亀がA歩進む。
亀が90度右に曲がる。 }を4回繰り返す。
}
「言霊」の特徴
当てはめ型なので、構文の形を好きなよう
に変更できる
メインとは{
亀(亀型)を生成する。
大きさ100の四角形を亀が描く。
}
大きさ「A(整数型)」の四角形を「亀(亀型)」が描くとは{
{ 亀がA歩進む。
亀が90度右に曲がる。 }を4回繰り返す。
}
「言霊」の特徴
自然な日本語で記述できる
「分かち書き」は使わない
助詞を用いた表現ができる
言霊の例
宣言文は 「~(~)を生成する。」
代入文は 「~を~に代入する。」
という表現をする。
int a;
a=1;
int b;
b=2;
a=a+b;
a(整数型)を生成する。
1をaに代入する。
b(整数型)を生成する。
2をbに代入する。
a+b を a に代入する。
言霊の例
仮定文は
~ならば{ ~ } or もし~ならば
{ ~ }
という形を持つ
aが3と等しいならば{
if( a==3 ){
1をaに代入する。
a=1;
}
}
言霊の例
繰り返し文は
~限り{ ~ }
という形を持つ
while( a<b ){
a=a+1;
}
aがbよりも小さい限り{
a+1をaに代入する。
}
言霊の例
繰り返し文は
{ ~ }を~回繰り返す
という形も持つ
{
亀がA歩進む。
亀が90度右に曲がる。
}を4回繰り返す。
言霊の例
それぞれが文型を持つ
言霊の文法解説
a<b
a==1
aがbよりも小さい
aがbと等しい
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
自由課題
言霊とタートルグラフィックを使って、何か絵を描
いて見てください。自分で考えた絵でもいいし、
下記の絵でもいいです。一つでもいいし、複数で
もいいです。
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
課題の意図
課題の意図は以下の通りです。
言霊コンパイラのバグを見つけること
言霊を使ってどんなプログラムを書くのか、
受講者の反応を見ること
受講者のプログラミング能力を見ることが
目的の課題ではありません。ですから全然
書けなくても評価に影響はしません。
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
こちらが希望する提出物
「こんなプログラムを作ったら、動かなかっ
た」というバグ報告。ソースも提出。
「こんなものを作ろうとしたんですけど、どう
やって書いたらいいか分かりませんでし
た」という報告。出来かけでいいので、ソー
スも提出。
「こんなもの作って動きました」という報告。
ソースも提出。
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
こちらが希望する提出物
「こんな書き方ができたら嬉しい」
「こういう書き方のほうがいいんじゃない?」
という提案。
その他、文法に対する意見・感想・文句など。
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
提出先
[email protected]
サブジェクトは「対話システム論自由課題」
としてください。