第2回 状態モデルと 命令型言語(1) 担当:犬塚

Slides:



Advertisements
Similar presentations
プログラミング Ⅱ 第2回 第1回(プログラミングⅠの復 習) の解説. プログラムの作り方 いきなり完全版を作るのではなく,だんだ んふくらませていきます. TicTa cToe1.
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
(Rubyistのための) 超音速:ML入門
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
C言語によるプログラミングスタイル 制御システム工学科 山北 昌毅.
プログラミング言語としてのR 情報知能学科 白井 英俊.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
VBA H106077 寺沢友宏.
授業展開#11 コンピュータは 何ができるか、できないか.
言語処理系(3) 金子敬一.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
条件式 (Conditional Expressions)
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラムはなぜ動くのか.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
第7回 条件による繰り返し.
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
プログラミング言語入門 手続き型言語としてのJava
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
関数の定義.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
プログラミング言語入門.
アルゴリズムとプログラミング (Algorithms and Programming)
Structured programming
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
VBで始めるプログラミング 第三回 コードを書こう!! まきはた@ナーク ’04/05/21.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プログラムの基本構造と 構造化チャート(PAD)
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
コンパイラ 2011年10月20日
C言語 はじめに 2016年 吉田研究室.
基礎プログラミング演習 第6回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
ポインタとポインタを用いた関数定義.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
ウェブデザイン演習 第6回.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
情報処理Ⅱ 2005年10月28日(金).
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 第3回 2004年10月19日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

第2回 状態モデルと 命令型言語(1) 担当:犬塚 プログラミング言語論 第2回 状態モデルと 命令型言語(1) 担当:犬塚

今日の講義 状態モデルと命令型言語パラダイムの特徴を概観する 状態モデル 命令型言語パラダイム 代入文、変数の概念と状態 制御文 構造化プログラミング データ型 副プログラムと手続き

状態モデル 計算モデル(computation model) =「計算するとはどういうことか」に対する答え。 状態モデルにおける計算とは 機械の内部状態を次々に変えてゆくこと。 要するに、オートマトンを考えること。

チューリング機械 チューリング機械(Turing Machine)は状態モデルにおける計算の典型例 入力テープを1つ読む(入力記号) 現在の状態と、入力記号の組合せ   に応じて ヘッドを動かす(右、左、動かさない) ヘッド位置に記号を書く つぎの状態を決める 1に戻って繰り返す アラン・チューリング

状態モデルと命令型言語パラダイム 状態を次々に変化させることで計算をさせる計算モデルでは、命令型プログラミング言語(imperative programming languages)が発展する。 チューリング機械は状態遷移表を持つが、表が大きくなったとき表形式は得策でない。 フローチャートは状態遷移図であり、分かりやすいが書き下すのが困難。 そのため命令型言語が適していると考えられる。

状態モデル=命令型言語の特徴 変数と変数への代入 → 代入型言語ともいう。 制御構造の発展 手続き 変数と変数の構造 データ型 変数と変数への代入 → 代入型言語ともいう。 変数と変数の構造 データ型 データ型と手続きの結びつき→抽象データ型 制御構造の発展 構造化プログラミング 手続き 手続き呼び出しと値引渡し 再帰呼び出し

変数の概念 変数は記憶装置のある領域に対応する。 記憶装置の記憶内容が即ち、その機械の「状態」であるため、状態モデル=代入(assignment)によるプログラム。 記憶装置 シーケンシャルアクセスメモリ:決められた順にのみアクsequential access memory セスできる記憶装置 ランダムアクセスメモリ:番地をつかってどの場所も自由random access memory にアクセスできる記憶装置 ノイマン型の計算機はランダムアクセスメモリを主記憶にもつ。

ランダムアクセスマシン(RAM) チューリング機械よりも現実に近い計算機のモデル。 チューリング機械は記憶装置もテープだったのに対し、RAMマシンは   番地つきのランダ   ムアクセスメモリを   もつ。 番地

代入文 A := A+2; B[i] := X^2+i; 左辺に置かれた式はメモリの場所を示す。 A := A+2; B[i] := X^2+i; 左辺に置かれた式はメモリの場所を示す。 AやB[i]の値に意味があるのでなく、記憶場所を指し示す。 変数が左辺に置かれたとき表す記憶場所を左辺値という。 右辺に置かれた式は値を示す。 A、X、iはメモリそのものでなく、その値を指し示す。 変数が左辺にあるとき表す値を右辺値という。

命令と命令の制御 状態モデルでは次の文がある。 変数内容の変化が基本であり、他の文はそのための仕掛け。 命令文:代入文、入出力文 状態を変化させる形式、即ち命令文 命令の順序を決める形式、制御構造(制御文) プログラムの解釈を変える形式、宣言文 コメント文 変数内容の変化が基本であり、他の文はそのための仕掛け。 命令文:代入文、入出力文 宣言文:変数の宣言、データ型の定義、手続きの定義

命令の制御と制御構造 制御構造は、命令の順序を決める文。 逐次実行(合成) 分岐 繰り返し (副プログラムの呼出しと復帰) S1 ; S2 S1 ; S2 分岐 if-then、if-then-else、switch-case (多分岐) 繰り返し while 条件 do-end (前判定) repeat-until 条件 (後判定) (副プログラムの呼出しと復帰)

GOTO文 GOTO文は無条件分岐。 命令にラベルをつけておくとGOTO文は常に、そのラベルの箇所に制御を移す。 L1 X:=X+1; if X>100 GOTO L2; GOTO L1; L2 ... 機械語にあるため、FORTRAN以来、命令型言語の多くが採用している。 制御が自由に変えられるため、多用すると分かりにくいプログラムになる ― スパゲッティプログラム

命令の制御と制御構造 プログラムは、それぞれの箇所が何をしているのか理解できるように書かなければならない。 プログラムのテキストの構造(段落) プログラムの実行順序の構造 一致するとき、そのプログラムは構造化(structured)されているという。 必要な制御構造を容易に記述できる制御文が必要。→ それを備える言語=構造的プログラミング言語 structured programming languages 一致する必要 がある

構造的プログラミング プログラムのテキスト上の段落と、命令の制御の段落(実行される時間的な固まり)が一致する。 それだけでなく、 プログラムのテキスト上の段落と、機能的な段落が一致する。 したがって、読みやすく、保守が容易。(可読性) 構造的プログラミング言語といわれる言語で書けばよいわけでない。(心がけの問題) GOTO文の排除

構造化された制御フロー 逐次実行 分岐 if-then、if-then-else ループ while、repeat の制御形式(あるいはその変形)が代表的。 その段落への入り口、出口が1つのみ。 single entry/single exit

ループの不変条件(不変表明) 意味的分かりやすさが構造的プログラミングの利点。 特にループ中での性質を明確にすることが重要。 while文、repeat文ではループ中に満足している条件、脱出したとき満足する条件が明確。 while 条件 do  ... end ループ内では「条件」は必ず真。 =この条件をループの不変条件 (loop invariant)という。 条件 false true

データ型と変数の型 データ(値)とデータを入れておく変数は表裏一体。 これらの種類分けがデータ型(data type)。 しかし、細かく言えば、 値のデータ型 式のデータ型 変数のデータ型  がある。 値や式にデータ型があっても、変数にはデータ型のない言語もある(Lisp, Prolog)

値の型、式の型、変数の型 PASCALの例: 値のデータ型は表現で決まる。 式のデータ型は演算子の性質で決まる。 「1」はinteger(整数)、「1.0」はreal(実数)。 式のデータ型は演算子の性質で決まる。 「1+2.0」はreal, 「1+2」はinteger。 変数のデータ型は、型宣言で決まる。

データ型の働き 処理系に情報を与える エラーの検出 必要なメモリの割当て アドレス計算 データ型の宣言は、変数の利用法を特定するもの。 その利用法に合わない場合にエラーを検出する。 これを型検査(type check)という。 コンパイル時の検査=静的(static)検査と、実行時(dynamic)の検査がある。 型検査に合格したプログラムを型安全(type safe)という。

データ型:基本型と構造型 基本型(basic type):その型のデータを直接扱う演算がある型。 整数型、実数(浮動小数点数)型、文字型、論理型。 構造型(structured type):基本型を要素にして作られる型。 配列型、レコード(構造)型、リスト、など。 構造を作るしくみを型構成子(type constructor)という。 言語によっては、集合型、列挙型、関数型などがある。 ポインターとそれを用いたデータ構造 データ型は値の集合に対応、構造型は集合演算に対応する。

副プログラムと手続き 命令型言語では次の言葉はおおよそ同じ意味 サブルーチン サブプログラム 手続き 関数 繰り返し利用するルーチンへ制御を移すものと考えたとき、サブルーチン、サブプログラムが、 1つの機能を持つブラックボックスとしてルーチンを抽出したものと考えるとき手続き、関数が好まれる。

手続き、関数 プログラムの繰り返しを回避するための制御構造ではなく、機能ブロックとしての働きをもたせたルーチンが手続き。 手続きが値を返すことを前提とするとき、関数という。 手続き、関数の要素: 引数の渡し方、結果の戻し方 手続き内部の変数の扱い 手続き内外での変数の通用範囲、生存期間

命令型言語パラダイム 代入文が基本の命令。 これの順序を決める制御文を備える。 変数やデータの型を有する。 副プログラムが書ける。 近代的命令型言語では、 構造的プログラミングの言語構造をもつ。 構造的データ型の型構成子をもつ。 手続きに関する言語の取り決めがある。