対話システム論 第六回 日本語によるプログラミング 対話システム論 第六回 日本語によるプログラミング 政策・メディア研究科 岡田 健
講義概要 なぜ日本語でプログラムか? プログラミング言語の歴史 これまでの日本語プログラミング言語 日本語プログラミング言語「言霊」 情報教育の観点から プログラミング言語の歴史 これまでの日本語プログラミング言語 日本語プログラミング言語「言霊」 言語仕様
プログラミング入門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は命令の存在するアドレスで、具体的な処理は、 100番地の値から200番地の値を減じ、その結果を300 番地にセットする 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番地に結果を入れる。
FORTRANは、数式を直感的に記述する事ができる、最初のプログラミング言語だった プログラミング言語の歴史 FORTRAN FORTRANは、数式を直感的に記述する事ができる、最初のプログラミング言語だった 可読性 記述性 *** 長方形の面積の計算 *** WRITE(*,*) '長方形の面積の計算' WRITE(*,*) '縦の長さ?' READ(*,*) FLEN WRITE(*,*) '横の長さ?' READ(*,*) WIDTH AREA=FLEN*WIDTH WRITE(*,*) AREA END
プログラミング言語の歴史 FORTHとMIND FORTRAN以後、様々なプログラミング言語が登場しました。 APL,COBOL,PASCAL,BASIC,C 後置記法を用いた言語FORTHと、 その日本語化であるMINDを説明します。
数式は一般的には中置記法で記述し、 機械語では後置記法に変換される プログラミング言語の歴史 FORTH 数式は一般的には中置記法で記述し、 機械語では後置記法に変換される 2*3+4 SET 100 2 SET 101 3 MUL 102 SET 103 4 ADD 105 2 3 * 4 +
FORTHは、最初から後置記法で記述ができる言語だった プログラミング言語の歴史 FORTH FORTHは、最初から後置記法で記述ができる言語だった FORTH記述 4 + 2 4 – 2 4 * 2 4 / 2 n = 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 4 2 + を計算する場合 スタックから2と4 を取り出し計算する 2 4 4 6 4 2 +
プログラミング言語の歴史 FORTH 2 4 2 + 3 * + 2 4 2 + 3 * + を計算する場合 これは 2+(4+2)*3 と同じ。 2と4を計算 3と6を計算 18と2を計算 2 3 4 4 6 6 18 20 2 2 2 2 2 2 2 4 2 + 3 * +
FORTHは日本語の語順で記述されている プログラミング言語の歴史 FORTH FORTHは日本語の語順で記述されている 4 2 + 3 2 + 2 * 4に2を足したもの 3に2を足したものに2を掛ける
FORTHの語順に着目して、FORTHを日本語化したものがMINDである。 プログラミング言語の歴史 MIND FORTHの語順に着目して、FORTHを日本語化したものがMINDである。 4に 2を 加えたものを 数値表示する 3に 2を 加えたものに 2を 掛けて 数値表示する
MINDではひらがなを無視する事で、 言葉を抜き出す プログラミング言語の歴史 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(整数型)を生成する。 宣言文は 「~(~)を生成する。」 代入文は 「~を~に代入する。」 という表現をする。 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 ){ }
言霊の例 繰り返し文は ~限り{ ~ } という形を持つ aがbよりも小さい限り{ while( a<b ){ a+1をaに代入する。 繰り返し文は ~限り{ ~ } という形を持つ aがbよりも小さい限り{ a+1をaに代入する。 } while( a<b ){ a=a+1; }
言霊の例 繰り返し文は { ~ }を~回繰り返す という形も持つ { 亀がA歩進む。 亀が90度右に曲がる。 }を4回繰り返す。
言霊の例 それぞれが文型を持つ 言霊の文法解説 aがbよりも小さい aがbと等しい a<b a==1
自由課題 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/ turkey@crew.sfc.keio.ac.jp サブジェクトは「対話システム論自由課題」としてください。