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

Slides:



Advertisements
Similar presentations
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
ループで実行する文が一つならこれでもOK
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
VBA H106077 寺沢友宏.
コンパイラ 第9回 コード生成 ― スタックマシン ―
C言語 配列 2016年 吉田研究室.
情報科学1(G1) 2016年度.
第6章 2重ループ&配列 2重ループと配列をやります.
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
変数のスコープの設計判断能力 を育成するプログラミング教育
プログラムはなぜ動くのか.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
トキのカタチ2016 電子工作(Arduino)講習
スクリプト言語を用いたPHITSの連続実行
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
大岩 元 慶応大学環境情報学部 数式の表現と日本語 大岩 元 慶応大学環境情報学部
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとデータ構造1 2006年6月16日
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
コンピュータに計算させる命令を確かめよう!
前回の練習問題.
第7回 条件による繰り返し.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
正多角形の作図 プログラミングで多角形を描く方法を考えよう 1時間目.
プログラミング入門第6回 ~レゴロボットのプログラミング6~
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
コンパイラ 2011年10月20日
C言語 はじめに 2016年 吉田研究室.
オブジェクト プログラミング 第2回 プログラムの基本.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
補講:アルゴリズムと漸近的評価.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
5年 算数 「面積(平行四辺形)」.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
プログラミング入門 電卓を作ろう・パートI!!.
プログラミング入門 はじめてのタートルグラフィックス マイクロワールドEX講義用資料(ICT活用教育ICT活用教育研究所)
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
情報教育のブーターとしてのプログラミング
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第2章 printf(“変数と入力”); scanf(“%d”,&num);
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミングの原理 データ構造とプログラミング (第4回).
アルゴリズム ~すべてのプログラムの基礎~.
Presentation transcript:

対話システム論 第六回 日本語によるプログラミング 対話システム論 第六回 日本語によるプログラミング 政策・メディア研究科 岡田 健

講義概要 なぜ日本語でプログラムか? プログラミング言語の歴史 これまでの日本語プログラミング言語 日本語プログラミング言語「言霊」 情報教育の観点から プログラミング言語の歴史 これまでの日本語プログラミング言語 日本語プログラミング言語「言霊」 言語仕様

プログラミング入門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 サブジェクトは「対話システム論自由課題」としてください。