ソフトウエア技法

ソフトウエア技法(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 ((sin x)/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)
(* (sqrt 10) (sqrt 10))
(expt 2 4)
(remainder 10 3)
√10
24
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 を定義