ソフトウエア技法(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 を定義
© Copyright 2024 ExpyDoc