プログラミング AIII - 新潟大学aoto/lecture/ProgrammingAIII/...14回...
Transcript of プログラミング AIII - 新潟大学aoto/lecture/ProgrammingAIII/...14回...
プログラミング言語AIII
2019年度講義資料 (0)
新潟大学工学部工学科知能情報システムプログラム
青戸等人
講義の概要講義の情報
目次
1 講義の概要
2 講義の情報
1 / 15
講義の概要講義の情報
目次
1 講義の概要
2 講義の情報
2 / 15
講義の概要講義の情報
科目の概要
オブジェクト指向型のプログラミングと並んで, 関数型のプログラミングは,抽象度が高く,高信頼なプログラムを構築するアプローチとして,近年,著しく発展している.
また,関数型のプログラミングに用いられる諸要素は,さまざまなより近代的なプログラミング言語の設計に取り入れられており,これらの諸要素に親しんでおくことは,より普遍的なプログラミング能力を身に付ける上で重要である.
このような観点から,本講義では,代表的な関数型プログラミング言語の1つである SMLプログラミング言語を用いたプログラミングを学ぶ.
3 / 15
講義の概要講義の情報
科目の概要
オブジェクト指向型のプログラミングと並んで, 関数型のプログラミングは,抽象度が高く,高信頼なプログラムを構築するアプローチとして,近年,著しく発展している.
また,関数型のプログラミングに用いられる諸要素は,さまざまなより近代的なプログラミング言語の設計に取り入れられており,これらの諸要素に親しんでおくことは,より普遍的なプログラミング能力を身に付ける上で重要である.
このような観点から,本講義では,代表的な関数型プログラミング言語の1つである SMLプログラミング言語を用いたプログラミングを学ぶ.
3 / 15
講義の概要講義の情報
科目の概要
オブジェクト指向型のプログラミングと並んで, 関数型のプログラミングは,抽象度が高く,高信頼なプログラムを構築するアプローチとして,近年,著しく発展している.
また,関数型のプログラミングに用いられる諸要素は,さまざまなより近代的なプログラミング言語の設計に取り入れられており,これらの諸要素に親しんでおくことは,より普遍的なプログラミング能力を身に付ける上で重要である.
このような観点から,本講義では,代表的な関数型プログラミング言語の1つである SMLプログラミング言語を用いたプログラミングを学ぶ.
3 / 15
講義の概要講義の情報
科目のねらい
さまざまな(モダンな)プログラミング言語に通じる, モダンな関数型プログラミングのさまざまな基本概念とプログラミング手法を学習する.
また,これらの学習を通じて,プログラミングにおいて普遍的に必要となる諸態度,つまり,
1 どのようなアルゴリズムを実現しプログラムがどのように動くのかについて,明確なアイデアを持つことの必要性,
2 プログラムがどうしてエラーになるのかを論理的に考え,デバッグすることの必要性,
3 より見通しのよい,整理された,わかりやすいコードを書くことの必要性,
4 問題をどのように分割して,求めるプログラムを実現するのか,
を確認し,受講者のプログラミング能力の向上を図る.
4 / 15
講義の概要講義の情報
学習の到達目標
1 SMLの基本関数を用いて計算するプログラムを書けること.
2 条件分岐やパターンマッチを利用できること.
3 再帰を用いて関数をプログラムできること.
4 名前の束縛やスコープなどを理解して,利用できること.
5 高階関数を利用したプログラムを書けること.
6 型変数が何を表わすかわかり,多相型の関数を利用できること.
7 リスト型,組型,オプション型などを使えること.
8 データ型を用いてプログラムを書けること.
9 モジュールシステムを利用したプログラムを書けること.
10 例外を利用したプログラムを書けること.
5 / 15
講義の概要講義の情報
授業計画
1回 式と値,型,変数と関数2回 関数定義の基本,組型,多相型,高階関数3回 局所定義
4回 リスト型(1)5回 リスト型(2)6回 オプション型7回 関数定義の手法(1)8回 関数定義の手法(2)9回 データ型(1)10回 データ型(2)11回 例外,レコード型と配列型12回 参照型,副作用と逐次実行13回 モジュールシステムとシグニチャ14回 ストリーム型とファイル操作15回 プロセス操作,OSとのインターフェース
6 / 15
講義の概要講義の情報
参考書について
「プログラミング言語Standard ML入門」大堀淳著
共立出版
SML]を開発している大堀先生による教科書.
「ML for the working programmer」L. C. Paulson 著Cambridge University Press, 2nd ed.対話的証明システム Isabelle の開発でも有名な Paulson 先生による教科書.
7 / 15
講義の概要講義の情報
プログラミングを学ぶことの重要性
プログラミングは以下の普遍的な能力を伸ばす.
具体的な実体で考える能力を育てる.共通言語の形式性の理解をはぐくむ.論理的思考能力が鍛えられる.
プログラミングのスキルは非常に広く,奥深い.あらゆるサイエンスや芸術に通じるものがある.
8 / 15
講義の概要講義の情報
なぜ関数型プログラミングを学ぶのか
さまざまなプログラミングパラダイム
手続き型プログラミング言語
オブジェクト指向型プログラミング言語
関数型プログラミング言語
論理型プログラミング言語
1つのプログラミング言語は,「人が計算をどのように科学的に捉えられるか」の究極的に具体的な答えとも考えられる.
9 / 15
講義の概要講義の情報
なぜ Standard ML なのか
関数型プログラミングを学ぶ際に選択肢となりうる,代表的なプログラミング言語
Lisp や Scheme
Standard ML (SML)
Ocaml (Objective Caml)
Haskell
10 / 15
講義の概要講義の情報
目次
1 講義の概要
2 講義の情報
11 / 15
講義の概要講義の情報
講義の情報
講義ホームページhttp://www.nue.ie.niigata-u.ac.jp/
˜aoto/lecture/ProgrammingAIII/
スライド資料(講義ホームページに掲載)を利用.
講義時限:火曜と金曜の3限(全15回).6/25(火),6/28(金)は休講.その分は補講を実施.
授業実施場所:(たぶん)次回からは計算機演習室スライドを読んで実行例や作成したプログラムを解答してもらいます.前の方に着席してください.
オフィスアワー: 水曜の昼休み.青戸の居室で質問等を受け付けます. 会議等で都合つかないときは,講義ホームページ上で連絡します.
12 / 15
講義の概要講義の情報
講義の予習・復習とレポート
予習
スライド資料に載っている実習課題を,予かじめ,やっておくこと. また,実習課題のログやプログラムをとっておくこと. (講義後,レポートとして提出.)
復習とレポート講義で進んだところまでの実習課題をレポートとします.講義での他の人のプログラムを見て,修正や改良を施すこと. レポートの体裁はそれほど気にしません.プログラムと最低限のコメント/実行例をつけてください.
レポートは,テキストファイルもしくはPDFファイルで,学務情報システムから提出をしてください. レポートの採点等は返却しません.
13 / 15
講義の概要講義の情報
期末試験と成績
期末試験
資料,参考書等持ち込み可.
成績
レポート(50%)および期末試験(50%)により,学習の到達目標に達しているかに照らして評価する.(+発表点を加算)
14 / 15
講義の概要講義の情報
今日の残りの時間
計算機演習室へ移動.
プログラミングAIIIの環境が使えるかチェック. (ログイン直後に,programming-a-iii の環境を選択.)
予習を進めていけるかの諸確認.
次回の講義に備えて,講義資料(1)を予習,実習課題をやること.
15 / 15