スライド 1: sp-2. Scheme の式とプログラム
スライド 2
スライド 3: 2-1 Scheme の式
スライド 4: Scheme を使ってできること
スライド 5: Scheme の計算機能
スライド 6: Scheme のプログラム機能 (1/2)
スライド 7: Scheme のプログラム機能
スライド 8: Scheme の式に登場するもの
スライド 9: Scheme の式の例 ー 四則演算 -
スライド 10: 実行結果の例
スライド 11: コンピュータが行っていること
スライド 12: Scheme の式の例 ー 各種の演算 ー
スライド 13: 実行結果の例
スライド 14: コンピュータが行っていること
スライド 15: Scheme の式の例 ー 各種の演算 ー
スライド 16: 実行結果の例
スライド 17: コンピュータが行っていること
スライド 18: Scheme の式の例 ー 入れ子になった括弧 ー
スライド 19: 括弧の意味
スライド 20: 実行結果の例
スライド 21: コンピュータが行っていること
スライド 22: 2-2 Scheme の関数
スライド 23: プログラムとは
スライド 24: 円の面積
スライド 25: 円の面積を求めるプログラム
スライド 26: 円の面積を求めるプログラム
スライド 27: 関数としてのプログラム
スライド 28: まとめ
スライド 29: 2-3 パソコン演習
スライド 30: パソコン演習の進め方
スライド 31: Scheme プログラミングの手順
スライド 32: DrScheme の2つのウインドウ
スライド 33: DrScheme の2つのウインドウ
スライド 34: DrScheme の Execute ボタン
スライド 35: DrScheme の2つのウインドウ
スライド 36: DrScheme でのプログラム保存法
スライド 37
スライド 38: DrScheme の使用
スライド 39: 「Intermediate Student」に設定
スライド 40: 例題1.簡単な数式
スライド 41: 「例題1.簡単な数式」の手順
スライド 42: 「例題1.簡単な数式」の結果 (1/2)
スライド 43: 「例題1.簡単な数式」の結果 (2/2)
スライド 44: コンピュータが行っていること
スライド 45: よくある間違い
スライド 46: 定義用ウインドウ
スライド 47: 例題2.円の面積
スライド 48: 「例題2.円の面積」の手順
スライド 49: 「例題2.円の面積」の結果(1/4)
スライド 50: 「例題2.円の面積」の結果(2/4)
スライド 51: 「例題2.円の面積」の結果(3/4)
スライド 52: 「例題2.円の面積」の結果(4/4)
スライド 53:
スライド 54: プログラム実行までの手順
スライド 55: プログラムの実行
スライド 56: コンピュータが行っていること
スライド 57: コンピュータが行っていること
スライド 58: 例題3.簡単なプログラム
スライド 59: 「例題3.簡単なプログラム」の手順
スライド 60
スライド 61
スライド 62: Scheme の式の例 変数が登場するもの
スライド 63: 2-4 課題
スライド 64: 課題1.ドルから円への変換
スライド 65: 課題のヒント
スライド 66: 課題1のヒント
スライド 67: 課題2.摂氏から華氏への変換
スライド 68: 課題3.元利の計算
スライド 69: 課題4.Scheme 式
sp
-2. Scheme
の式とプログラム
1
金子邦彦
(
Scheme
プログラミング)
URL:
https://www
.kkaneko.jp/pro/scheme/index.html
Scheme
言語における式の記
述方法と、関
数定義
による
プログラム作成の基礎
【
学習内容の構成
】
1.
Scheme
の式
:四則演算や各種演算
子を用
いた計算
式の記述と実行
2.
Scheme
の関数
:
define
による関数定義とパラメー
タを用いたプログラム作成
3.
DrSchem
e
の操作
:定義用ウインドウと実
行用ウイ
ンドウを使用したプログラミン
グ環境の活用
•
前提:基本的な数学の知識(四
則演算、べき乗、三
角
関数)
•
意義:関数型プログラミングの
基本概念の習得、計
算
手順の抽象化の理解
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
など
•
変数名
•
四則演算子:
+, -, *, /
•
その他の演算子:
remainde
r
, quotient, ma
x,
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
が表示される
•
(
remainde
r
10
0 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
の式
式の実行結果
例えば:
(
r
emainde
r
100
15)
を入力すると・・・
10
が表示される
•
(
sqrt
2
)
;; 2
の平方根
•
(
expt
2 3)
;; 2
の3乗
•
(
log
4)
;; log
e
4
(e
を底とする)
•
(
sin
0.7
85)
;; sin 0.785
•
(
cos
0.785)
;; cos 0.785
•
(
tan
0.7
85)
;; tan 0.785
•
(
asin
(/ (sq
rt 2) 2))
;;
•
(
acos
(/ (sqrt 2) 2
))
;;
•
(
atan
1)
;; tan
-1
1
2
三角関数の
単位はラジアン
2
2
2
si
n
1
−
2
2
c
o
s
1
−
15
Scheme
の式の例
ー
各種の演算
ー
実行結果の例
16
式を入力すると,
計算が行われて表示される
コンピュータが行っていること
コンピュータ
(Scheme
搭載
)
Scheme
の式
式の実行結果
例えば:
(
sqrt
2)
を入力する
と・・・
#i1.414
2135623730951
が表示される
#
i
とあるのは「近似値」という意味
17
18
Scheme
の式の例
ー
入れ子になった括弧
ー
2
)
10
/
30
(
*
)
5
3
(
*
)
2
2
(
+
+
Scheme
言語で書くと:
(
*
(
+
2
2)
(
/
(
*
(
+
3 5)
(
/
30 10))
2))
「
*
」とあるのは,「乗算」の意味
Scheme
の式
(
*
(
+
2 2) (
/
(
*
(
+
3 5) (
/
30 10)) 2)
)
括弧が,計算の「単位」を表現
2
)
10
/
30
(
*
)
5
3
(
*
)
2
2
(
+
+
19
括弧の意味
実行結果の例
20
実行結果が表示される
式を入力すると
21
コンピュータが行っていること
コンピュータ
(Scheme
搭載
)
Scheme
の式
式の実行結果
例えば:
(
*
(
+
2 2)
(
/
(
*
(
+
3
5)
(
/
30
10))
2))
を入力する
と・・・
48
が表示される
2-2 Scheme
の関数
22
計算等の実行手順を記述したもの
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
例
Scheme
のプログラム
円の面積を求めるプログラム
•
円の半径
r
の値から,円の面積
「
(* 3.14 (*
r r
))
」を計算
23
プログラムとは
半径
r
の円の面積は
3.14
r
2
r
(
円の面積
)
24
円の面積
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
この部分は
Sch
eme
の式
(変数
r
を使用)
25
円の面積を求めるプログラム
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
値を1つ(名前は
r
)
受け取る
(r
のことをパラメータ
という)
r
の値から「
(* 3.14 (*
r r))
」を計算
26
円の面積を求めるプログラム
•
プログラムは「関数」と見立てるこ
とができる
•
入力と出力がある
ar
ea-
of
-disk
r
の値
: 5
のとき
78.5
入力
出力
27
関数としてのプログラム
関数
=
プログラムの単位
(de
fine (
ar
ea-
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つのウインドウ
Ex
ecut
e
ボタン
・定義を行ったら
「
Ex
ec
ute
ボタン」を押す
→
関数の定義内容を
コンピュータが
読み込む
→
「実行用ウインドウ」の
中身はクリアされる
34
DrScheme
の
Execute
ボタン
DrScheme
実行用ウインドウ
実行結果
実行用ウインドウ
式
定義用ウインドウ
関数
35
DrScheme
の2つのウインドウ
•
何日かかけてプログラム作成したいとき
→
プログラムを保存
する必要あり
•
DrScheme
の「
Save
機能」を活用すること
•
ファイル名は「
英語
」で付けることを勧める
36
DrScheme
での
プログラム保存法
保存では,「
File
」
→
「
Sa
ve
Definitions
」
を行う
37
•
DrScheme
の起動
プログラム
→
PL
T
Scheme →
DrScheme
•
今日のパソコン演習では「
Intermediate
Student
」
に設定
Language
→ Choose Language
→ Intermediate
Student
→ Execute
ボタン
38
DrScheme
の使用
39
「
Intermedia
te Student
」に設定
Language
→ Choose Languag
e
Int
er
mediat
e Student
を選択し,
「
OK
」をクリック
最後に
Ex
ecute
ボタン
40
例題1.簡単な数式
•
次の
Scheme
の式を
DrScheme
の実行用ウイン
ドウに入力し,実行してみる
2
)
10
/
30
(
*
)
5
3
(
*
)
2
2
(
+
+
•
Scheme
言語で書くと:
(
*
(
+
2
2)
(
/
(
*
(
+
3 5)
(
/
30 10))
2))
Scheme
の式
1.
次の式を「
実行用ウインドウ
」で,実行しなさい
(
*
(
+
2 2)
(
/
(
*
(
+
3 5)
(
/
30 10))
2))
☆
次は,例題2に進んでください
41
「例題1.簡単な数式」の手順
式を実行用ウインドウに入力し
て,
En
t
er
キーを押すと
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))
間違いの例
1
間違いの例
2
+の後にスペースが無い
*の後にスペースが無い
45
よくある間違い
+
,
ー
,
*
,
/
,
sqrt
,
e
xpt, r
emainder
など
の基本的な演算は,すでに,コンピュータ内
に組み込み済み
簡単な数式の実行
では,定義用ウインド
ウ
は使用しない
46
定義用ウインドウ
•
円の半径
r
から面積を求める関数
area-
of
-disk
を書き,実行する
例)
5 → 78.5
•
関数の名前:
area-
of
-disk
•
パラメータ:
r
47
例題2.円の面積
1.
次を「
定義用ウインドウ
」で,実行しなさい
•
入力した後に,
Ex
ec
ute
ボタンを押す
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
2
.
その後,次を「
実行用ウインドウ
」で実行しなさい
☆
次は,例題3に進んでください
(
ar
ea-
of
-disk
5)
48
「例題2.円の面積」の手順
まず,定義用ウインドウで
プログラムを編集している
49
「例題2.円の面積」の結果
(1/4)
Ex
ecut
e
ボタンを押す
と,定義用ウインドウ
に書いたプログラム
が,コンピュータに読
み込まれる
このとき,実行用ウインドウ
の中身はクリアされる
50
「例題2.円の面積」の結果
(2/4)
実行用ウインドウで,
(
ar
ea-
of
-disk
5)
と入力して,
En
ter
キーを押す
(これは,
r
の値
を
5
に設定しての実行)
51
「例題2.円の面積」の結果
(3/4)
実行結果である「
78.5
」が
表示される
(確かに
5
×
5
×
3.14 = 78.5
)
52
「例題2.円の面積」の結果
(4/4)
今度は,
(
ar
ea-
of
-disk
10)
と書いて,
r
の値
を
10
に設定し
ての実行.
実行結果である「
314
」が
表示される
(確かに
10
×
10
×
3.14 = 314
)
53
①
プログラムを書き,コンピュータに読み込
ませる
②
読み込ませたプログラムを実行させる
(define (
ar
ea-
of
-disk
r
)
(*
3.14
(*
r
r
)))
例
(
ar
ea-
of
-disk
5)
例
Scheme
のプログラム
Scheme
のプログラム
を実行させるための
Scheme
の式
(
ar
ea-
of
-disk
10)
円の面積を求める
プログラム
実際に,半径
5,
半径
10
の円の面積を求める
54
プログラム実行までの手順
•
式の中に「関数名」
を書く
例:
(
area-
of
-disk
5)
←
これも、
Scheme
の
式
実際に,半径
5
の円の面積を求める
55
プログラムの実行
56
コンピュータが行っていること
コンピュータ
(Scheme
搭載
)
Scheme
の
プログラム(関数)
例えば
(define (
ar
ea
-
of
-disk
r
)
(*
3.14
(*
r
r
)))
を読み込ませると
いったん,
コンピュータ内に
記憶される
57
コンピュータが行っていること
コンピュータ
(Scheme
搭載
)
Scheme
の式
式の実行結果
例えば:
(
ar
ea-
of
-disk
5)
を入力する
と・・・
78.5
が表示される
•
次の関数を書き,実行する
f1
: x
と
N
から
「x
N
/
N
」を求める
f2
: x
と
y
から
「
x, y
のうち大きいほう」
を求める
f3
: x
から
「
x
を100で割った余り」を
求
める
f4
: x
から
「
x
を100で割った商」を求
め
る
58
例題3.簡単なプログラム
1.
次を「
定義用ウインドウ
」で,実行しなさい
•
入力した後に,
Ex
ecute
ボタンを押す
(defin
e (
f1
x N
)
(/ (e
xpt
x N
)
N
))
(defin
e (
f2
x y
)
(max
x y
))
(defin
e (
f3
x
)
(r
emaind
er
x
100))
(defin
e (
f4
x
)
(quotien
t
x
100))
2
.
その後,次を「
実行用ウインドウ
」で実行し
なさい
☆
次は,課題に進んでください
(
f1
2 5)
(
f2
3 4)
(
f3
123)
(
f4
123)
59
「例題3.簡単なプログラム」
の手順
まず,
Scheme
のプログラムを
コンピュータに読み込ませてい
る
60
確かに
2
5
/5 = 6.4
確かに
123
を
100
で
割った余りは,
23
確かに
123
を
100
で
割った商は,
1
確かに
, 3
, 4
の大きい方は
4
61
•
x
N
/
N
(/ (expt
x N
)
N
)
・・・
2変数の式
•
x, y
のうち大きいほう
(max
x y
)
・・・
2変数の式
•
x
を100で割った余り
(remainder
x
100)
・・・
1変数の式
•
xを100で割った商
(quotient
x
100)
・・・
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
と
dol
l
ar
は
どちらか1つにそろえること
3.関数の書き方の間違い
(define (d2y)
(*
120.53
d))
(define (d 2
y d)
(*
120.53
d))
4.関数名の付け方の間違い
⇒
「
d 2 y
」では無く,
「
d2y
」と書くこと
⇒
d2y
の後に
d
が必要
66
課題1のヒント
•
摂氏(
Celsius
)
c
から華氏
(
Fahrenheit
)を求める関数
c2f
を作成
し,実行結果を報告しなさい
•
define
を使うこと
•
摂氏と華氏の変換式:
c
=
5
×
(f
-32)/9
67
課題2.摂氏から華氏への変換
•
元利を求める関数
in
terest
を作成し,実行結
果を報告しなさい
•
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
の平方根
3
の
5
乗
356
を
4
で割った余り
7
の対数
(但し,
e
を底とする)
sin (0.7865)
(
0.7865
はラジアン)
•
次の計算を行う
Scheme
の式を書き,
「
DrScheme
の実行用ウインドウ」で実行
して,実行結果を報告しなさい
69
課題4.
Scheme
式