1 プログラミング言語論 第5回 手続き呼出し 担当:犬塚. 2 今日の講義 手続きや関数などの呼出しに関わること  手続きの宣言、手続きの定義  名前の束縛とスコープ  ブロック構造  スコープ規則  引数渡し  引数渡しと評価(計算)方式.

Slides:



Advertisements
Similar presentations
SPSSによるHosmer-Lemeshow検定について
Advertisements

物理演算を利用したビデオエフェクタの 作成 浅野益弘. 研究内容 経緯 NiVE ( Nico Visual Effects )用のエフェ クトプラグインの作成 本プラグインにより動画作成にかかる 時間と手間の短縮と省力化を目指す.
確率と統計 - 確率2回目 - 平成 18 年 11 月 1 日. 2 今日の内容 1. 確率の復習(再整理) 2. 加法の定理 3. 乗法の定理へのイントロ.
レポート書き方. おしいレポート よく調べてある それぞれの、1文の言っていることは正 しい しかし、全体として、何が言いた いのかわからない 内容の重要だが、全体の構成も重 要である.
1 7.時間限定チューリングマシンと クラス P. 2 7 -1.入力サイズ チューリングマシンの入力記号 の長さ を 入力サイズという。 名称:合成数の問題 インスタンス:整数n 問:nは合成数か? 通常は、入力サイズとしてはもっとも短い表現での 長さが利用される。 例えば、次のような合成数の問題における入力サイズは、
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
第 3 回 iPhone アプリ開発勉強会 Objective-C 基礎講座 - インスタンスメソッド - 三井 相和.
9.線形写像.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
時間的に変化する信号. 普通の正弦波 は豊富な情報を含んでいません これだけではラジオのような複雑な情報 を送れない 振幅 a あるいは角速度 ω を時間的に変化 させて情報を送る.
5.連立一次方程式.
相関.
―本日の講義― ・平均と分散 -代表値 -ぱらつき(分散・標準偏差等) ・Excelによる演習
論理回路 第2回 今日の内容 前回の課題の説明 数の体系 – 数の表現 – 代表的な数 – 基数の変換 – 補数.
ノイズ. 雑音とも呼ばれる。(音でなくても、雑 音という) 入力データに含まれる、本来ほしくない 成分.
広告付き価格サービ ス 小園一正. はじめに 世の中には様々な表現方法の広告があり ます。その中でも私たち学生にとって身 近にあるものを広告媒体として取り入れ られている。 価格サービス(無料配布のルーズリー フ)を体験したことにより興味を惹かれ るきっかけとなった。主な目的は、これ.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
地球温暖化と 天候の関係性 ~温暖化は天候のせいなのではないのか~. 目的課題 地球温暖化現象 ただの気象条件によるものではないのか? 地球温暖化現象に天候は関係しているの か?
1章 行列と行列式.
本宮市立白岩小学校. 1 はじめに 2 家庭学習プログラム開発の視点 ① 先行学習(予習)を生かした 確かな学力を形成する授業づく り ② 家庭との連携を図った家庭学習の習慣化.
プログラミングⅠ( 1 組) 第 9 回
フーリエ級数. 一般的な波はこのように表せる a,b をフーリエ級数とい う 比率:
プログラミング入門2 第4回 式文 代入式 論理演算子 ループの脱出、スキップ 情報工学科 篠埜 功.
3.エントロピーの性質と各種情報量.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
複素数.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
人工知能特論II 第7回 二宮 崇.
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
人工知能特論 II 第 4 回 二宮 崇 1. CCG (COMBINATORY CATEGORIAL GRAMMAR) 組合せ範疇文法 2 今日の講義の予定.
重不況の経済学 第2章第2節 山下 真弘. 不均等成長 不均等成長=市場の特定の製品または特定の国・ 地域で付加価値の縮小が生じること 要因は2つ 製品別の「生産性向上速度の差」 付加価値総額の天井(=需要制約)
アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」
3.正方行列(単位行列、逆行列、対称行列、交代行列)
様々な情報源(4章).
プログラミング演習B ML編 第3回 2010/6/15 (コミ) 2010/6/16 (情報・知能) 住井 ~sumii/class/proenb2010/ml3/
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
方程式を「算木」で 解いてみよう! 愛媛大学 教育学部 平田 浩一.
C言語応用 構造体.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
Automatic Language Acquisition, an Interactive Approach † Robert J. Martin † 大西昇 ‡ 山村毅 † 名古屋大学 ‡ 愛知県立大学.
HKS Analysis Log Jul 2006 Part1 D.Kawama. 第壱部 HKS Sieve Slit Analysis.
1 中野研究室 4 年ゼミのイロハ 斉藤(修士 2 年) ( 2009 年 ”4 年ゼミのイロハ ” を参考に作りました)
移動エージェントプログラムの 動作表示のためのアニメーション言 語 名古屋大学情報工学コース 坂部研究室 高岸 健.
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
プログラミングⅠ( 2 組) 第 1 回 / pLB1.pptx.
8.任意のデータ構造 (グラフの表現とアルゴリズム)
プログラミング入門2 第3回 複合文、繰り返し 情報工学科 篠埜 功.
メニューに戻る メニューに戻る | 前表示スライド 前表示スライド G*power 3 の web ページ Windows はこちら Mac はこちら ダウンロード後,実行してインストール.
第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚
実験5 規則波 C0XXXX 石黒 ○○ C0XXXX 杉浦 ○○ C0XXXX 大杉 ○○ C0XXXX 高柳 ○○ C0XXXX 岡田 ○○ C0XXXX 藤江 ○○ C0XXXX 尾形 ○○ C0XXXX 足立 ○○
ことばとコンピュータ 2007 年度 1 学期 第 1 回. 2 ことばとコンピュータ 授業科目名:言語情報処理論 授業題目名:ことばとコンピュータ 履修コード: 5067 教室: 323 一学期開講 授業の進め方 – 基本的に講義中心ですすめ,時々コンピュー タを使う.
プログラミング演習( 1 組) 第 8 回
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
Self-efficacy(自己効力感)について
本文. 考えながら読みましょ う 「いろいろなこと」( 3 行目)は何で すか 「①電話料金はコンビニで支払いをしていま す。いつでも払えますから、便利です。」 「②夕食はコンビニで買います。お弁当やお かずがいろいろありますから。」今、若者に 人気のあるコンビニは、いろいろなことをす るのに非常に便利な場所になった。
11万km上空のかぐやから見た地球. デジタル信号処理 Digital Signal Processing 2010 年度春学期 Spring Semester, 2010 担当者: 栗濱 忠司( Professor ) 第3週第3週.
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing.
今日の内容 高階関数  関数を値として扱う 関数を引数にとる 関数を返す関数 プログラミングの例題  クイックソート.
Presentation transcript:

1 プログラミング言語論 第5回 手続き呼出し 担当:犬塚

2 今日の講義 手続きや関数などの呼出しに関わること  手続きの宣言、手続きの定義  名前の束縛とスコープ  ブロック構造  スコープ規則  引数渡し  引数渡しと評価(計算)方式

3 手続きと関数 procedures and functions  手続きと関数はともにサブプログラム。  引数を渡して、何らか引数に依存した計算を行う =パラメータ化された計算 ( parameterized computation )  結果の返し方: 1. 呼出し側とサブプログラムの両方から可視 (visible) な変数に結 果を反映させる。 2. 実引数と結びついた仮引数の一つに値を与える。 3. 関数として結果を返す。  関数は返す値以外に計算状態に全く影響を与えないの が理想的=副作用( side-effect )無し

4 手続き/関数の宣言と定義 declaration and definition of procedures and functions 手続きの定義と宣言を分けて考える。 手続きの宣言型宣言 type intarray = array[1..10] of integer 手続きの定義変数定義 var a : intrarray 手続き本体 Procedure 手続き名(パラメータ) ; いろいろな呼び方がある: インターフェース プロトコル パラメータプロファイル プロトタイプ

5 名前, 束縛 names, bindings  プログラム中で各種の対象を表わすために名前を用いる 変数名, 手続き名, 型名など  名前を何かそれが表わす対象に結びつけることを束縛と いう。  束縛時刻 binding time を念頭に置くことは重要 言語の設計時 コンパイラの実装時 コンパイル時 プログラムのロード時 リンク時 実行時 例: var count:integer; count := count +5; integer の意味=言語設計時 5 の表現=コンパイラ実装時 count の型=コンパイル時 変数として count =リンク時 count の値=実行時 + =コンパイル時 ( 両辺の型がきまってから )

6 特別な名前 special names  プログラミング言語で、特別な名前によってプログラム の構造などを示す。 if, procedure, integer,...  言語によってその扱いが異なる キーワード文脈によって特別な意味をもつ名前 keywords 他の文脈では、別の意味で使ってもよい 予約語特別な意味を表わすために予約された名前 reserved names 他の目的には使えない。 FORTRAN Integer Real 整数型の Real という変数 Real Integer 実数型の Integer という変数 事前定義語予め意味が定められているが、再定義して predefined words 別の意味で使うこともできる。

7 有効範囲(スコープ) scope  名前(変数名、手続き名等)とその束縛に対し、 その名前でその束縛が参照されるとき、その名前 は可視 (visible) という。  ある名前が可視であるプログラムの範囲をスコー プという。 スコープ規則: 1. ある手続きを実行中に変数xが表れたとき、xの宣言が その手続きにあるならば、この宣言がxの束縛を決める。 2. その手続きにないなら、この手続きを定義している手続 き(親手続き)の中に宣言を探す。そこにあれば、その 宣言が束縛を決める。 3. さらに、そこになければ … その親 …

8 有効範囲(スコープ) scope  通常のスコープの規則 =静的スコープ規則 static scope rule  静的スコープ規則は、プログラムによって予め 決められる規則である。だから静的。  プログラムの字面で決まるので、 lexical scope rule ともいう。  逆に、プログラムのある箇所での束縛の全体を 環境 environment という。

9 動的スコープ dynamic scope  名前の束縛が実行時にきまる規則。 1. ある名前xが手続きに現れたとき、xの宣言がその 手続きにあれば、その宣言がxの束縛を決める。 2. なければ、この手続きを呼び出した手続き内の、宣 言をみる。そこにxの宣言があればそれがxの束縛 を決める。 3. さらになければ、それを呼び出した手続きを、 …  この方式を動的スコープ規則( dynamic scope rule )という。  ある変数xの束縛、型が実行時にしか決められない。  LISP 他で使われてきたが、可読性、実行効率、安全性の問 題で、最近のLISPや他の言語では使われていない。

10 ブロック構造 block structure  手続きの中に手続きを入れ子状に書いた場合、ス コープが形成される。  手続きを作らずに、プログラムの一部をくくりだし て、そこにスコープをつくる仕掛けをブロックとい う。  ブロックは、 その中で変数など、名前 ( 局所変数など)の宣言ができる。 つまり、束縛できる。 通常その変数は stack-dynamic 。 その中がスコープになる。  ブロックをつくれる言語: ブロック構造言語 block-structured languages

11 手続きのスコープ関係 main var x procA var y procB var z ( procB 本 体) procC var u ( procC 本体) procD var v procE var w ( procE 本体) 各手続き本体で可視の名前  main: procA, procD, 変数 x  procA: procA, procB, procC, 変数 x, y  procB: procA, procB, 変数 x, y, z  procC: procA, procB, procC, 変数 x, y, u  procD: procA, procD, procE, 変数 x, v  procE: procA, procD, procE, 変数 x, v, w その手続きの本体で、名前が可視であれ ば手続きは呼べる。自分よりも後ろの ものは通常可視でない。 プログラム中での場所で、可視の変数を 参照環境 reference environment という。 ( procA 本体) ( procD 本体) ( main 本体)

12 引数 parameters  仮引数 formal parameters と  実引数 actual parameters  仮引数と実引数の対応付け: その位置によって対応付ける: positional parameters 仮引数の名称を指定 :keyword parameters sort(list => L, number => n);  引数に関するその他のしくみ デフォルト値を持つ引数 仮引数と実引数の個数が異なる 実引数が足らない → 未定義を許す 実引数があまる → 複数の実引数をリストにしてまとめて 1つの仮引数 に対応づける その個数を与える、など。

13 引数渡し parameter passing  実引数を仮引数に渡す方式 ( 呼出しの方式 ) には複数ある。 値渡しまたは値呼出し pass-by-value, call by value 結果渡し pass-by-result 入出力渡し pass-by-value-result 参照渡しまたは参照呼出し pass-by-reference, call by reference 名前渡しまたは名前呼出し pas-by-name, call by name  引数には、値を手続きに渡す目的 (in mode) と受取る目 的 (out mode) のものがある。

14 値渡し、値呼出し  in mode のためのモデル。  実引数の値 ( 右辺値 ) をコピーして仮引数に渡す方 式 1. 実引数の値を求める。 2. 仮引数は、手続き内の局所変数として生成する。 3. 実引数の値をその変数の初期値とする。 4. 手続きの本体を実行する。  手続き内で局所変数の内容が変化しても、呼出し 側に影響しない。  局所変数の生成と値のコピーの必要がある。

15 結果渡し  out-mode のモデル。計算結果を戻すために 使う。  値渡しを逆方向で行う方式。 1. 仮引数は単に局所変数として生成され、計算で利用 される。 2. 手続きでの計算が行われ結果がでる。 3. 仮引数に入っている値を実引数にコピーする。  実引数は変数でなければならない。  変数生成、値のコピーが必要。

16 入出力渡し  in/out-mode のモデル。  値渡しと結果渡しの組合せ。  値渡しを逆方向で行う方式。 1. 仮引数を局所変数として生成する。 2. in mode の仮引数には、実引数の値がコピーされる。 3. 手続きでの計算が行われる。 4. out-mode の仮引数に入っている値を実引数にコピー する。

17 参照渡し、参照呼出し  変数渡し、変数呼出し pass-by-variable, call by variable ともいう。  in mode, out mode 両方のモデル。  値ではなく、実引数への参照(=アクセス経路、通 常は番地、左辺値)が仮引数に渡される。  仮引数への変更は、実引数に反映するので、結果を かえすため( out mode )として使える。  局所変数の生成、コピーの必要がない。  実引数は変数等であり、式は許されない。  変数の衝突に注意が必要。

18 名前呼出し  実引数に与えたテキスト、仮引数の箇所に置換する。 ただし、名前の衝突が起きる場合はこれを回避する。 1. 手続きの本体にある仮引数を、対応する実引数のテキストで置 換する。 2. ただし、これによって手続き内の局所変数と衝突する場合は、 局所変数の名前の付け替えをする。 3. できあがった手続き本体を、手続き呼出しのところに挿入する。 4. ただし、この挿入によって手続き内の大域変数が呼出し側の局 所変数と衝突する場合は呼出し側の局所変数を付け替える。 5. そのまま実行する。 名前の衝突は2通り 実引数と手続き内の局所変数との衝突 手続き内の大域変数と呼出し側の局所変数の衝突

19 名前呼出しの例 呼出しプログラム begin integer i, n; n:=n+1; p(A[i]) … end; proc p(x) begin integer i; x:=x+i+n end; begin integer i; A[i]:=A[i]+i+n end; begin integer j; A[i]:=A[i]+j+n end; begin integer i, n; n:=n+1; begin integer j; A[i]:=A[i]+j+n end; … end; begin integer i, m; m:=m+1; begin integer j; A[i]:=A[i]+j+n end; … end; ①手続き p 本体の 仮引数xを実引 数 A[i] で置換 ② i が衝突するの で局所変数を j に 付け替え。 ①呼出し箇所に手 続きを挿入 ①手続き内の大域 変数 n が呼出し 側の局所変数と 衝突するので、 名前の付け替え。

20 引数渡しと評価方式  引数渡しの方式は式の評価方式と関係する。  例 p(X,Y,Z) begin if X>0 then Y else Z end; において、呼出し p(f(x), g(x), h(x)) を考える。  参照渡しでは → こうした呼出しはできない。  値呼渡しでは → f(x), g(x), h(x) を計算し、その値を渡 す。  名前渡しでは → f(x), g(x), h(x) をそのままテキストと して 渡し、置換されたプログラムを実行する。 f(x) の値によって、 g(x) と h(x) の一方の み 計算される。

21 最内評価、最外評価、遅延計算  値呼出しは、式を計算するのにその最も内側から評価す る方式に対応し、最内評価 inner-most evaluation と いう。  名前呼出しは最も外側から評価する最外評価 outer- most evaluation に関連する。  最外評価は、式の計算をなるべく後回しにする 遅延計算(評価) lazy computation (evaluation) と関連する。  遅延計算は、並行プログラミングなどでの基礎技術。  式の一部に未定義の関数がある場合、遅延計算は最内評 価よりも広い範囲で計算に成功する。

22 まとめ  手続きと手続き呼出しに関する基本的メカニズ ムを紹介した。 手続き内での名前と対象の結びつき=束縛、環境 束縛を決めるタイミング 束縛の範囲=スコープ スコープを決める規則=スコープ規則  静的スコープ、動的スコープ 手続きに情報を渡す仕掛け=引数 引数渡しの方式  値渡し、参照渡し、名前渡し 引数渡しと評価方式、最内評価、遅延計算