140 likes | 267 Views
ソフトウエア技法( 2012 年版). コンピュータサイエンス専攻 南出靖彦. 講義の目標. プログラムの基礎的概念の習得 抽象的に考える能力の向上 厳密にプログラムを考える 再帰的データ構造 再帰的関数(手続き). 目標の実現法. 基本となるプログラムの構造に焦点をあてる 特定の言語の構文の詳細や言語特有のトリックを覚えることをできるだけさける Scheme を用いる. Scheme によるプログラミング. 記号やリストを主とするデータ 帰納関数のように書くプログラム 対話的プログラミング(インタラクティブ プログラミング)
E N D
ソフトウエア技法(2012年版) コンピュータサイエンス専攻 南出靖彦
講義の目標 • プログラムの基礎的概念の習得 • 抽象的に考える能力の向上 • 厳密にプログラムを考える • 再帰的データ構造 • 再帰的関数(手続き)
目標の実現法 • 基本となるプログラムの構造に焦点をあてる • 特定の言語の構文の詳細や言語特有のトリックを覚えることをできるだけさける • Schemeを用いる
Schemeによるプログラミング • 記号やリストを主とするデータ • 帰納関数のように書くプログラム • 対話的プログラミング(インタラクティブ プログラミング) • Racket (PLTSchemeが進化したシステム)という使いやすいプログラミング環境
Racket システム • http://racket-lang.org/ • 学類の計算機 • Applicationフォルダ → coins フォルダ → Racket v5.1.3フォルダ→DrRacket • 自分でインストールする場合 • Racketをインストールするには上のURLからダウンロードのページへ進み,ダウンロードする • ダウンロードしたファイルをアプリケーションフォールダに置き,DrRacket.appを起動する
Schemeでプログラミング技法を学ぶ利点 • プログラミングの本質を容易に学べる • 普遍的な方法を学べば,他の様々なプログラム言語でのプログラミングの理解も容易 • Scheme「で」学ぶのであって,Scheme「だけを」学ぶのでない事に注意
Schemeの基本 • 括弧を基本とする構文 • 括弧は,単語から式を作る「普遍的な」方法 • データもプログラムも同じ表現 • 関数の評価を基本とする計算
関数の表記を基本とする構文 • 関数 f(a,b,c)は(f a b c)と書く • 関数が入れ子になっているときは、再帰的にこの規則を適用 • 1+2のように,関数記号が真ん中にくる記法は使わない(なぜ?)
問 • 4 + 2 log ((sinx)/x) はSchemeでどう表現する? • (+ 4 (* 2 (log (/ (sin x) x))))
数と演算 • 5, -5, 2/3, 17/3,12/9, 3.333 • 演算 (+ 5 5) (+ -5 5) (+ 5 -5) (- 5 5) (* 3 4) (/ 8 12) (* (+ 7 2) (/ (* (+ 3 5) (/ 30 10)) 2)) (sqrt 10) √10 (* (sqrt 10) (sqrt 10)) (expt 2 4) 24 (remainder 10 3) 10を3で割った余り
真理値と演算 • 真: #t, 偽: #f • 演算 > (not #f) #t > (< 5 10) #t > (and (or #t #f) #t) #t
プログラミングにおける変数 • 値を入れておく場所 • どのような値もとれる表現
Schemeにおける変数 • (define x e) のように,初期値eで変数xを宣言できる. • 例:> (define mypi 3.14)> mypi 変数の値を得る3.14 • 変数を含んだ表現 • 3.14 r r は (* 3.14 (* r r)) とかく • (* 3.14 r r) でもよい • (* mypi r r) でもよい (3.14を円周率と思えば)
Schemeにおけ関数定義 • 関数を定義 • (define (関数名仮引数 … 仮引数) 式) 例:> (define (area-of-disk r) (* r r 3.14))> (area-of-disk 2) 関数を適用12.56 • area-of-disk(r) = 3.14 × r × r という関数area-of-disk を定義