sp-2. Scheme の式とプログラ
1
金子邦彦
Scheme プログラミング)
URL: https://www.kkaneko.jp/pro/scheme/index.html
トライン
2-1 Scheme の式
2-2 Scheme の関数
2-3 パソコン演習
2-4 課題
2
2-1 Scheme の式
3
Scheme を使ってできること
計算機能
Scheme を入力すると:
計算が行われて,実行結果が表示される
プログラム機能
Scheme プログラムを入力すると:
プログラムが記憶され,後で何度でも実行できる
4
5
Scheme の計算機能
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
Scheme の式を入力すると,
計算が行われて表示される
Scheme のプログラム機能 (1/2)
6
コンピュータ
(Scheme 搭載)
Scheme
プログラム
Scheme のプログラムを
読み込ませると ・・・
いったん,プログラムが
記憶される
Scheme のプログラム機能
実行結果が表示され
記憶されていた
プログラムが使用される
コンピュータ
(Scheme 搭載)
Scheme の式
今度は,読み込ませた
プログラムを実行させると ・・
式の実行結果
7
数値:
5, -5, 0.5 など
変数名
四則演算子:
+, -, *, /
その他の演算子:
remainder, quotient, max,
min, abs, sqrt, expt, log, sin,
cos, tan
asin, acos, atan など
括弧
(, )
関数名
define
Scheme 式は,以下の組み合わせ
これ以外にもあるが,
適宜授業で触れていく 8
Scheme の式に登場するも
(+5 5)
(+-5 5)
(+0.5 0.5)
(-5 5)
(* 3 4)
(/8 12)
負の数も扱える
+, -, *, / が使える
負の数も扱え
*は掛け算
の意味
9
Scheme の式の例
四則演算
実行結果の例
10
式を入力すると,
計算が行われて表示される
11
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(+5 5)
を入力する
と・・・
10
が表示される
(remainder 100 15) ;; 100 15 で割った剰余(=10)
(quotient 100 15) ;; 100 15 で割った商(=6)
(max 3 5) ;; 3, 5 の大きい方 (=5)
(min 3 5) ;; 3, 5 の小さい方 (=3)
(abs -10) ;; -10 の絶対値 (=10)
12
Scheme の式の例
各種の演算
13
実行結果の例
式を入力すると,
計算が行われて表示される
14
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(remainder 100
15)
を入力すると・・・
10
が表示される
(sqrt 2) ;; 2 の平方根
(expt 2 3) ;; 2 の3乗
(log 4) ;; loge4(eを底とする)
(sin 0.785) ;; sin 0.785
(cos 0.785) ;; cos 0.785
(tan 0.785) ;; tan 0.785
(asin (/ (sqrt 2) 2)) ;;
(acos (/ (sqrt 2) 2)) ;;
(atan 1) ;; tan-1 1
2
三角関数の
単位はラジアン
2
2
2
sin 1
2
2
cos 1
15
Scheme の式の例
各種の演算
実行結果の例
16
式を入力すると,
計算が行われて表示される
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(sqrt 2)
を入力する
と・・・
#i1.4142135623730951
が表示される
#i とあるのは「近似値」とい意味
17
18
Scheme の式の例
入れ子になった括弧
2
)10/30(*)53(
*)22(
Scheme 言語で書くと:
(*(+2 2)
(/(*(+3 5)
(/30 10))
2))
*」とあるのは,「乗算」の意味
Scheme の式
(*(+2 2) (/(*(+3 5) (/30 10)) 2))
括弧が,計算の「単位」を表現
2
)10/30(*)53(
*)22(
19
括弧の意味
実行結果の例
20
実行結果が表示され
式を入力する
21
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(*(+2 2)
(/(*(+3 5)
(/30 10))
2))
を入力する
と・・・
48
が表示される
2-2 Scheme の関数
22
計算等の実行手順を記述したもの
(define (area-of-disk r)
(* 3.14
(* r r)))
Scheme のプログラム
円の面積を求めるプログラ
円の半径 rの値から,円の面積
(* 3.14 (* r r))」を計算
23
プログラムとは
半径 r の円の面積は 3.14
r2
r(円の面積)
24
円の面積
(define (area-of-disk r)
(* 3.14
(* r r)))
この部分は Scheme の式
(変数 r を使用)
25
円の面積を求めるプログラ
(define (area-of-disk r)
(* 3.14
(* r r)))
値を1つ(名前は r
受け取る
(r のことをパラメータ
とい
r の値から「(* 3.14 (* r r))」を計算
26
円の面積を求めるプログラ
プログラムは「関数」と見立てることができる
入力と出力がある
area-of-disk
r の値: 5 のとき 78.5
入力 出力
27
関数としてのプログラム
関数 プログラムの単位
(define (area-of-disk r)
(* 3.14
(* r r)))
1つの 関数
値を1つ受け取る(入力)
関数の名前
「関数である」ことを
示すキーワード
r の値から「(* 3.14 (* r r))
を計算(出力) 28
まとめ
2-3 パソコン演習
29
資料を見ながら,「例題」を行ってみる
各自,「課題」に挑戦する
自分のペースで先に進んで構いません
30
パソコン演習の進め方
Scheme の関数を
作り,コンピュータ
に読み込ませる
Scheme の関数の定義
作った関数を実行
して,実行結果を
得る
Scheme の式の実行
31
Scheme プログラミングの手順
定義用インド
実行用インド
32
DrScheme の2つのインド
関数を編集し
コンピュータ
読み込ませて
読み込んだ関
数を実行させ
ている
33
DrScheme の2つのインド
Execute ボタン
・定義を行ったら
Execute ボタン」を押す
関数の定義内容を
コンピュータが読み込む
「実行用インド」の
中身はクリアされる
34
DrScheme Execute ボタン
DrScheme
実行用インド
実行結果
実行用インド
定義用インド
関数
35
DrScheme の2つのインド
何日かかけてプログラム作成したいとき
プログラムを保存する必要あり
DrScheme の「Save 機能」を活用すること
ファイル名は「英語」で付けることを勧める
36
DrScheme でのプログラム保存法
保存では,「File
Save Definitions を行
37
DrScheme の起動
プログラム PLT Scheme
DrScheme
今日のパソコン演習では「Intermediate
Student
に設定
Language
→ Choose Language
→ Intermediate Student
→ Execute ボタン
38
DrScheme の使用
39
Intermediate Student」に設定
Language
→ Choose Language
Intermediate Student
を選択し,
OK」をクリック
最後に Execute ボタン
40
例題1.簡単な数式
次の Scheme の式を DrScheme の実行用イン
に入力し,実行してみる
2
)10/30(*)53(
*)22(
Scheme 言語で書くと:
(*(+2 2)
(/(*(+3 5)
(/30 10))
2))
Scheme の式
1. 次の式を「実行用インド」で,実行しなさい
(*(+2 2)
(/(*(+3 5)
(/30 10))
2))
次は,例題2に進んでください 41
「例題1.簡単な数式」の手順
式を実行用インドに入力して,
Enter キーを押すと
42
「例題1.簡単な数式」の結果 (1/2)
実行結果が表示される
43
「例題1.簡単な数式」の結果 (2/2)
44
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(*(+2 2)
(/(*(+3 5)
(/30 10))
2))
を入力する
と・・・
48
が表示される
「スペース(空白文字)」に意味がある
(*(+2 2)
(/(*(+3 5)
(/ 30 10))
2))
(*(+2 2)
(/(* (+3 5)
(/ 30 10))
2))
間違いの例 間違いの例
+の後にスペースが無い *の後にスペースが無い
45
よくある間違い
, , , , sqrt, expt, remainder など
の基本的な演算は,すでに,コンピュータ内
に組み込み済み
簡単な数式の実行
では,定義用インド
は使用しない
46
定義用インド
円の半径 rから面積を求める関数
area-of-disk を書き,実行する
例) 5 → 78.5
関数の名前: area-of-disk
パラメータ: r
47
例題2.円の面積
1. 次を「定義用インド」で,実行しなさい
入力した後に,Execute ボタンを押す
(define (area-of-disk r)
(* 3.14
(* r r)))
2. その後,次を「実行用インドで実行しなさい
次は,例題3に進んでください
(area-of-disk 5)
48
「例題2.円の面積」の手
まず,定義用インド
プログラムを編集している
49
「例題2.円の面積」の結果(1/4)
Execute ボタンを押す
と,定義用インド
に書いたプログラム
が,コンピュータに読
み込まれる
このとき,実行用インド
の中身はクリアされる 50
「例題2.円の面積」の結果(2/4)
実行用インドで,
(area-of-disk 5)
と入力して,Enter キーを押す
(これは,rの値 5 に設定しての実行) 51
「例題2.円の面積」の結果(3/4)
実行結果である「78.5」が
表示される
(確かに 5×5×3.14 = 78.552
「例題2.円の面積」の結果(4/4)
今度は,
(area-of-disk 10)
と書いて,rの値 10 に設定し
ての実行.
実行結果である「314」が
表示される
(確かに 10×10×3.14 = 31453
プログラムを書き,コンピュータに読み
ませる
読み込ませたプログラムを実行させる
(define (area-of-disk r)
(* 3.14
(* r r)))
(area-of-disk 5)
Scheme のプログラム
Scheme のプログラム
を実行させるための
Scheme の式
(area-of-disk 10)
円の面積を求める
プログラム
実際に,半径 5, 半径 10
の円の面積を求める 54
プログラム実行までの手順
式の中に「関数名」 を書く
例: (area-of-disk 5) これも、Scheme
実際に,半径 5
の円の面積を求める
55
プログラムの実行
56
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme
プログラム(関数)
例えば
(define (area-of-disk r)
(* 3.14
(* r r)))
を読み込ませると
いったん,
コンピュータ内に
記憶される
57
コンピュータが行っていること
コンピュータ
(Scheme 搭載)
Scheme の式
式の実行結果
例えば:
(area-of-disk 5)
を入力する
と・・・
78.5
が表示される
次の関数を書き,実行する
f1: x N から 「xNN」を求める
f2: x y から x, y ち大きいほ
を求める
f3: x から x を100で割った余り」を求
める
f4: x から x を100で割った商」を求め
58
例題3.簡単なプログラム
1. 次を「定義用インド」で,実行しなさい
入力した後に,Execute ボタンを押す
(define (f1 x N)
(/ (expt x N) N))
(define (f2 x y)
(max x y))
(define (f3 x)
(remainder x 100))
(define (f4 x)
(quotient x 100))
2. その後,次を「実行用インドで実行しなさい
次は,課題に進んでください
(f1 2 5)
(f2 3 4)
(f3 123)
(f4 123)
59
「例題3.簡単なプログラム」の手順
まず,Scheme のプログラムを
コンピュータに読み込ませている
60
確かに 25/5 = 6.4
確かに 123 100
割った余りは,23
確かに 123 100
割った商は,1
確かに, 3, 4 の大きい方は 4
61
NN
(/ (expt x N) N)・・・ 2変数の式
x, y ち大きいほ
(max x y)・・・ 2変数の式
x を100で割った余り
(remainder x100) ・・・ 1変数の
xを100で割った商
(quotient x100) ・・・ 1変数の式
関数の本体には「変数を含む式」を書くことになる
62
Scheme の式の例
変数が登場するもの
2-4 課題
63
ドル dから円を求める関数 d2y を作成
し,実行結果を報告しなさい
define を使こと
1ドルは,120.53円とする
64
課題1.ドルから円への変換
xから「10 x+ 30 を求める関数 foo
を作成し,実行結果を報告しなさい
解答の例:
(define (foo x)
(+ (* 10 x) 30))
実行結果は次の通り.期待通りの結果を得
> (foo 10)
130
> (foo 20)
230
あくまでも解等の例です)
65
課題のヒント
ここにあるのは「間違い」の例です.同じ間
違いをしないこと
1.「かっこ」の間違い
define (d2y d)
(* 120.53 dollar)
全体をかっこで囲むこと
2.変数名の対応の間違い
(define (d2y dollar)
(* 120.53 d))
変数名 d dolar
どちらか1つにそろえること
3.関数の書き方の間違い
(define (d2y)
(* 120.53 d))
(define (d 2 y d)
(* 120.53 d))
4.関数名の付け方の間違い
d 2 y」では無く,
d2y」と書くこと
d2y の後に d が必要
66
課題1のヒント
摂氏(Celsiuscから華氏
Fahrenheit)を求める関数 c2f を作成
し,実行結果を報告しなさい
define を使こと
摂氏と華氏の変換式: c5×(f-32)/9
67
課題2.摂氏から華氏への変換
元利を求める関数 interest を作成し,実行結
果を報告しなさい
define を使こと
元利の計算式:
元利 = 元金 ×(1+年利)年数
作成した関数を実行し,元金1000円,年利
2%での,50年後の元利を報告しなさい
68
課題3.元利の計算
5 + 5
-5 + 5
3 * 4
8 / 12
(2 + 2) * (((3 + 5) * (30 / 10)) / 2)
3 + 4.5
2の平方根
35
3564で割った余り
7の対数 (但し,e を底とする)
sin (0.7865) 0.7865 はラジアン)
次の計算を行Scheme の式を書き,
DrScheme の実行用インド」で実行
して,実行結果を報告しなさい
69
課題4.Scheme