対話システム論 第六回 日本語によるプログラミング
DESCRIPTION
対話システム論 第六回 日本語によるプログラミング. 政策・メディア研究科 岡田 健. 講義概要. なぜ日本語でプログラムか? 情報教育の観点から プログラミング言語の歴史 これまでの日本語プログラミング言語 日本語プログラミング言語「言霊」 言語仕様. プログラミング入門TAの経験. for( int i=0 ; iTRANSCRIPT
対話システム論 第六回日本語によるプログラミング
政策・メディア研究科岡田 健
講義概要なぜ日本語でプログラムか?
情報教育の観点から
プログラミング言語の歴史これまでの日本語プログラミング言語日本語プログラミング言語「言霊」
言語仕様
プログラミング入門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 100番地に2を入れる。201 SET 101 3 101番地に3を入れる。202 MUL 100 101 102 100番地と101番地を掛けて
102番地に結果を入れる。203 SET 103 4 103番地に4を入れる。204 ADD 102 103 104 102番地と103番地を足して
104番地に結果を入れる。
プログラミング言語の歴史
FORTRANFORTRANは、数式を直感的に記述する事ができる、最初のプログラミング言語だった
可読性記述性
*** 長方形の面積の計算 ***WRITE(*,*) ' 長方形の面積の計算 ' WRITE(*,*) ' 縦の長さ ?'READ(*,*) FLENWRITE(*,*) ' 横の長さ ?'READ(*,*) WIDTH AREA=FLEN*WIDTH WRITE(*,*) AREA END
プログラミング言語の歴史
FORTHとMINDFORTRAN以後、様々なプログラミング言語が登場しました。
APL,COBOL,PASCAL,BASIC,C
後置記法を用いた言語FORTHと、その日本語化であるMINDを説明します。
プログラミング言語の歴史
FORTH数式は一般的には中置記法で記述し、機械語では後置記法に変換される
2*3+4
SET 100 2SET 101 3MUL 102SET 103 4ADD 105
2 3 * 4 +
プログラミング言語の歴史
FORTHFORTHは、最初から後置記法で記述ができる言語だった
4 + 24 – 24 * 24 / 2n = q + 128;n = q - 64;n = q * 32;n = q / 16;
4 2 +4 2 –4 2 *4 2 /q @ 128 + n !q @ 64 - n !q @ 32 * n !q @ 16 / n !
FORTH 記述
プログラミング言語の歴史
FORTH
4 4
2
スタッ
クから2と4
を取り出し計算する 6
4 2 + を計算する場合
4 2 +
プログラミング言語の歴史
FORTH2 4 2 + 3 * + を計算する場合これは 2+(4+2)*3 と同じ。
2 2
4
2
2
4
2と4を計算 2
6
2
6
3 3と6を計算 2
18
20
18
と2を計算
2 4 2 + 3 * +
プログラミング言語の歴史
FORTHFORTHは日本語の語順で記述されている
4 2 +
4に2を足したもの
3 2 + 2 *
3に2を足したものに2を掛ける
プログラミング言語の歴史
MINDFORTHの語順に着目して、FORTHを日本語化したものがMINDである。
4に 2を 加えたものを 数値表示する
3に 2を 加えたものに 2を 掛けて 数値表示する
プログラミング言語の歴史
MINDMINDではひらがなを無視する事で、言葉を抜き出す
4に 2を 加えたものを 数値表示する
4 2 加 数値表示
プログラミング言語の歴史
MINDMINDは、後置記法が日本語の語順と同じである事に着目したFORTHを日本語化することで、日本語として読みやすい言語を作る事に成功している
これまでの日本語プログラミング言語
既存のものとして、以下のものがあるMINDドリトルひまわりTTS
これまでの日本語プログラミング言語
MINDFORTHを日本語化した言語で、日本語プログラミング言語として最も実績がある
連珠開始処理してここから
一回勝負して 勝敗を表示して 両者の勝ち回数を表示して連珠再挑戦?
でなければ 打ち切りつぎに
繰り返して連珠終了処理する
五目並べプログラムのメイン部分
これまでの日本語プログラミング言語
ドリトル学校教育を想定して作られた、オブジェクト 指向言語
カメ太=タートル!作る 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 NEXTNEXT
I を、1から、10まで、繰り返す( J を、1から、10まで、繰り返す( ( I& J )と、言う。 )。)。
これまでの日本語プログラミング言語
TTS最近登場している言語
’あいさつプログラム「初めまして TTSです。よろしくね」を表示答え$は 入力$(あなたの名前は?)さようなら}{答え$}{さんを表示
’ファイルのコピーフォルダ D:\バックアップ \ を作ってC:\My Documents\ 書類 \*.* を D:\バックアップ へコピーしろ
日本語プログラミング言語「言霊」
メインとは{亀(亀型)を生成する。亀が大きさ100の四角形を描く。
}
「亀(亀型)」が大きさ「A(整数型)」の四角形を描くとは{ { 亀がA歩進む。 亀が90度右に曲がる。 }を4回繰り返す。}
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/
「言霊」の特徴当てはめ型の言語である下記の宣言を見ると~が大きさ~の四角形を描くという手続きを宣言して使用している
メインとは{亀(亀型)を生成する。亀が大きさ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 もし~ならば{ ~ }という形を持つ
if( a==3 ){ a=1;}
aが3と等しいならば{ 1を aに代入する。}
言霊の例繰り返し文は~限り{ ~ }という形を持つ
while( a<b ){ a=a+1;}
aが bよりも小さい限り{ a+ 1を aに代入する。}
言霊の例繰り返し文は{ ~ }を~回繰り返すという形も持つ
{ 亀がA歩進む。亀が90度右に曲がる。
}を4回繰り返す。
言霊の例それぞれが文型を持つ
言霊の文法解説
a<ba==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/
提出 先[email protected]サブジェクトは「対話システム論 自由課題」としてください。
http://www.crew.sfc.keio.ac.jp/~turkey/kotodama/