sp
-2. Scheme
の式とプログラ
ム
1
金子邦彦
(
Scheme
プログラミング)
URL:
https://www
.kkaneko.jp/pro/scheme/index.html
ア
ウ
トライン
2-1
Sche
me
の式
2-2 Sche
me
の関数
2-
3
パソコン演習
2-
4
課題
2
2-1 Sc
heme
の式
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, 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
が表示される
•
(
remain
der
100 1
5)
;; 100
を
15
で割った剰余
(=10)
•
(
quot
ient
100 1
5)
;; 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
emainder
100
15)
を入力すると・・・
10
が表示される
•
(
sqrt
2
)
;; 2
の平方根
•
(
expt
2 3)
;; 2
の3乗
•
(
log
4)
;; log
e
4
(e
を底とする)
•
(
sin
0.785)
;; sin 0.785
•
(
cos
0.785)
;; cos 0.785
•
(
tan
0.785
)
;; tan 0.785
•
(
asin
(/ (sqrt 2) 2
))
;;
•
(
acos
(/ (sqr
t 2) 2))
;;
•
(
atan
1)
;; tan
-1
1
2
三角関数の
単位はラジアン
2
2
2
s
i
n
1
2
2
co
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 Sc
heme
の関数
22
計算等の実行手順
を記述したもの
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
例
Scheme
のプログラム
円の面積を求
めるプログラ
ム
•
円の半径
r
の値
から,円の
面積
「
(* 3.1
4 (*
r r
))
」を計算
23
プログラムとは
半径
r
の円の面積は
3.14
r
2
r
(
円の面積
)
24
円の面積
(de
fine (
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
この部分は
Scheme
の式
(変数
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 (
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つの
ウ
インド
ウ
Ex
ecut
e
ボタン
・定義を行ったら
「
Ex
ecute
ボタン」を押す
→
関数の定義内容を
コンピュータが
読み込む
→
「実行用
ウ
インド
ウ
」の
中身はクリアされる
34
DrScheme
の
Execute
ボタン
DrScheme
実行用
ウ
インド
ウ
実行結果
実行用
ウ
インド
ウ
式
定義用
ウ
インド
ウ
関数
35
DrScheme
の2つの
ウ
インド
ウ
•
何日かかけてプログラム作成したいとき
→
プログラムを保存
する必要あり
•
DrScheme
の「
Save
機能」を活用すること
•
ファイル名は「
英語
」で付けることを勧める
36
DrScheme
での
プログラム保存法
保存では,「
File
」
→
「
Sa
v
e De
finitions
」
を行
う
37
•
DrScheme
の起動
プログラム
→
PL
T
Scheme
→
DrScheme
•
今日の
パソコン演習では「
Intermediate
Student
」
に設定
Language
→ Choose
Language
→ Intermediate Student
→ Execute
ボタン
38
DrScheme
の使用
39
「
Interme
diate
Student
」に設定
Languag
e
→ Choose Languag
e
In
termediat
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, remain
der
など
の基本的な演算は,
すでに,コンピュータ内
に組み込み済み
簡単な数式の実行
では,定義用
ウ
インド
ウ
は使用しない
46
定義用
ウ
インド
ウ
•
円の半径
r
から面積を求める関数
area-
of
-disk
を書き,実行する
例)
5 → 78.5
•
関数の名前:
area-
of
-disk
•
パラメータ:
r
47
例題2.円の面積
1.
次を「
定義用
ウ
インド
ウ
」で,実行し
なさい
•
入力した後に,
Ex
ecute
ボタンを押す
(de
fin
e
(
ar
ea-
of
-disk
r
)
(* 3.14
(*
r
r
)))
2
.
その後,次を「
実行用
ウ
インド
ウ
」
で実行しなさい
☆
次は,例題3に進んでください
(
ar
ea-
of
-disk
5)
48
「例題2.円の面積」の手
順
まず,定義用
ウ
インド
ウ
で
プログラムを
編集している
49
「例題2.円の面積」の結果
(1/4)
Ex
ecute
ボタンを押す
と,定義用
ウ
インド
ウ
に書いたプログラム
が,コンピュータに読
み込まれる
このとき,実行用
ウ
インド
ウ
の中身はクリ
アされる
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
ec
ut
e
ボタンを押す
(defin
e
(
f1
x N
)
(/ (e
xpt
x N
)
N
))
(defin
e
(
f2
x y
)
(max
x y
))
(defin
e
(
f3
x
)
(r
emainder
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
から華氏
(
Fahrenhe
it
)を求める関数
c2f
を作成
し,実行結果を報告
しなさい
•
define
を使
う
こと
•
摂氏と華氏の変換式:
c
=
5
×
(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
の平方根
3
の
5
乗
356
を
4
で割った余り
7
の対数
(但し,
e
を底とする)
sin (0.7865)
(
0.7865
はラジアン)
•
次の計算を行
う
Scheme
の式を書き,
「
DrScheme
の実行用
ウ
インド
ウ
」で実行
して,実行結
果を報告しな
さい
69
課題4.
Scheme
式