---
title: sp-5. リスト，シンボル，文字列
tags:  #scheme #リスト #シンボル #first #rest #empty?  
author: [kunihikokaneko](https://www.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GE868ZD97D.jpg?width=480
description: Scheme プログラミング URL: https://www.kkaneko.jp/pro/scheme/index.html  金子邦彦研究室 URL: https://www.kkaneko.jp/index.html
published: January 26, 22
canonical: https://www.docswell.com/s/6674398749/ZPW2EK-2022-01-26-145815
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GE868ZD97D.jpg)

sp-5. リスト，シンボル，文字
列
（Scheme プログラミング）
URL: https://www.kkaneko.jp/pro/scheme/index.html
金子邦彦
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LEL9RDMMJR.jpg)

アウトライン
5-1 リストとは
5-2 Scheme プログラムでのリストの記法
list 句
5-3 リストに関する演算子
first, rest, empty?, length, list-ref, append
5-4 数字，シンボル，文字列を含むリスト
5-5 パソコン演習
5-6 課題
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4JMZRPY6EW.jpg)

5-1 リストとは
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PJR6R19N79.jpg)

リストとは
１５
８
６
３２
２３
データの並び
データに順序がある
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/PEXMRYQ87X.jpg)

5-2 Scheme でのリストの表記
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/3EKGR39LJD.jpg)

Scheme でのリストの記法
リストであることを
本体の部分
示すキーワード
(list 15 8 6 32 23)
これ自体が１つの式
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/L73N8GW675.jpg)

first と rest
１５
first
８
６
３２
２３
rest
• first
• 先頭のこと
• rest
• 先頭を取り除いた残り
• rest もまたリスト
例） 上のリストの rest の rest の rest の first は：
２
３
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/87DWM1KMJG.jpg)

empty
• empty は「空リスト」を表す特別な記号
• rest との関係
• リストの長さが１の時には，empty
例）
(rest (list 15))
= empty
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/VJP9RQKQE8.jpg)

first, rest に関する実行エラー
• 要するに，「空でないリスト」だけ，first,
rest が実行できる
空で無い 空リス 数値
リスト
ト
first
OK
実行エ 実行エ
ラー
ラー
rest
OK
実行エ 実行エ
ラー
ラー
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/2EVMR5VPEQ.jpg)

first, rest に関する実行エラーの例
DrScheme の実行画面
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/57GGM6LQ7L.jpg)

empty?
• empty? は，リストが空リストであるかを調べる
• empty? の意味：
– 「空リスト」ならば true （さもなければ false）
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EQXR4YW7P.jpg)

リストに関するキーワード
• リストに関する演算子
• first
リストの先頭の要素
（例） (first (rest (rest a-list)))
• rest
リストから先頭の要素を除いた残り
（例） (rest a-list)
• empty? リストが空リストであるか調べる
（例） (empty? a-list)
• list
• list
リストを記述するためのキーワード
（例） (list 15 8 6 32 23)
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/KJ468QW171.jpg)

5-3 リストに関する演算子
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LE1V2PY57G.jpg)

リストに関する演算子
• length
リストの要素の個数
• list-ref
リストのｎ番目の要素（先頭は０番目）
• append
リストの連結
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GEWLR2GW72.jpg)

length
リストで無い場合には
実行エラーとなる
• length の意味：
– リストの要素の個数
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/47ZMRDL2E3.jpg)

list-ref
指定した番号が大きすぎる
と実行エラーとなる
リストで無い場合には
実行エラーとなる
• list-ref の意味：
– リストのｎ番目の要素（先頭は０番目）
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YJ6NR1M6JV.jpg)

append
リストで無い場合には
実行エラーとなる
• append の意味：
– リストの連結
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJ5584Z5J4.jpg)

5-4 数字，シンボル，文字列を含むリ
スト
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/9E2NKVRG7R.jpg)

シンボル
• 「記号」や「単語」を表す
• カッコ、ダブルクオーテーションマーク，空白，コン
マはシンボルとして使えない
(例）
&#039;the
&#039;a
&#039;cat!
&#039;tow^3
&#039;and%so%on
• 「&#039;」が無いと，変数名の意味になる
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/D7YPN3DG7M.jpg)

symbol=? の意味
• symbolの比較演算子
(symbol=? &#039;Hello &#039;Hello)
→ true
(symbol=? &#039;Hello &#039;Hallo)
→ false
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/VEN5XV68J8.jpg)

よくある間違い
• 本当は「symbol=?」と書くべき．
しかし，「=」と書いている．
• 実行すると，エラー
メッセージが出る
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/Y79Y86LXE3.jpg)

文字列
• 文字列： 「&quot;」で囲む
&quot;This is a string&quot;
• 空白文字なども「文字列」として使え
る
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/G7868ZX9JD.jpg)

さまざまな比較演算
• 数値同士の比較
&lt;, &lt;=, =, &gt;=, &gt; など
• シンボル同士の比較
symbol=? など
• 文字列同士の比較
string&lt;?, string&lt;=?, string=?, string&gt;=?,
string&gt;? など
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/L7L9RD8MER.jpg)

Schemeの式
• atomic 式
• 数値
• true, false 値
• 変数名
• シンボル
• 文字列
• empty,
など
• 括弧の入った式 (compound)
(演算子 式の並び)
(関数名 式の並び)
(cond [(条件式) 式] ... )
(list 式の並び）
• 関数の定義式
(define (関数名 変数の並び)
式)
など
のパターン
のパターン
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EMZRP667W.jpg)

Scheme の式
• 数値：
• 括弧
•
(, ), [, ]
• 関数名
•
•
•
•
•
•
•
•
•
5, -5, 0.5 など
true, false 値
true, false
シンボル，文字列
変数名
empty
四則演算子：
+, -, *, /
比較演算子
&lt;, &lt;=, &gt;, &gt;=, =
奇数か偶数かの判定
odd?, even?
論理演算子
and, or, not
リストに関する演算子
first, rest, empty?, length, list-ref, append
その他の演算子：
remainder, quotient, max, min,
abs, sqrt, expt, log, sin, cos, tan
asin, acos, atan など
• define
• cond
• list
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/PER6R1PNJ9.jpg)

5-5 パソコン演習
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/P7XMRY38JX.jpg)

パソコン演習の進め方
• 資料を見ながら，「例題」を行ってみる
• 各自，「課題」に挑戦する
• 各自で自習 ＋ 巡回指導
• 自分のペースで先に進んで構いません
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/37KGR3YLED.jpg)

DrScheme の使用
•
DrScheme の起動
プログラム
•
→ PLT Scheme → DrScheme
今日の演習では「Intermediate Student」
に設定
Language
→ Choose Language
→ Intermediate Student
→ Execute ボタン
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/LJ3N8G96J5.jpg)

例題１．リストの式
• リストの式を書く
• リストの式を書くために 「list」 を使う
１５
８
６
３２
２３
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/8JDWM1GMEG.jpg)

「例題１．リストの式」の手順
1. 次の式を「実行用ウインドウ」で，
実行しなさい
(list 15 8 6 32 23)
☆ 次は，例題２に進んでください
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/VEP9RQ3Q78.jpg)

実行結果の例
「(list 15 8 6 32 23)」
を入力すると
「(list 15 8 6 32 23)」
と表示される
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/27VMR54P7Q.jpg)

コンピュータが行っていること
Scheme の式
(list 15 8 6 32 23)
を入力する
と・・・
コンピュータ
(Scheme 搭載)
式の実行結果
(list 15 8 6 32 23)
がそのまま表示される
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/5JGGM61QJL.jpg)

例題２．リストの first と rest
• リスト (list 15 8 6 32 23) に対して，
first と rest を実行する
例）
１５
first
８
６
３２
２３
rest
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/47QXR4DWJP.jpg)

「例題２．リストの first と rest」の手
順
1. 次の式を「実行用ウインドウ」で，実行し
なさい
(first (list 15 8 6 32 23))
(rest (list 15 8 6 32 23))
☆ 次は，例題３に進んでください
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/KE468QZ1J1.jpg)

実行結果の例
first の実行結果
restの実行結果
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/L71V2PR5JG.jpg)

first
Scheme の式
(first (list 15 8 6 32 23))
を入力すると・・・
コンピュータ
(Scheme 搭載)
式の実行結果
15
が表示される
リストの先頭の要素
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/G7WLR21WJ2.jpg)

rest
Scheme の式
(rest (list 15 8 6 32 23))
を入力すると・・・
コンピュータ
(Scheme 搭載)
式の実行結果
(list 8 6 32 23)
が表示される
リストから先頭の要素を
37
除いた残り


# Page. 38

![Page Image](https://bcdn.docswell.com/page/4JZMRDP273.jpg)

例題３．リストの first と rest
• 要素が１つしか無いリスト (list 15)
に対して，first と rest を実行する
例）
１５
empty
first
rest
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/YE6NR146EV.jpg)

「例題３．リストの first と rest」の手
順
1. 次の式を「実行用ウインドウ」で，実行
しなさい
(first (list 15))
(rest (list 15))
☆ 次は，例題４に進んでください
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/GE5584Q5E4.jpg)

実行結果の例
first の実行結果
restの実行結果
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/972NKVPGJR.jpg)

first
Scheme の式
(first (list 15))
を入力すると・・・
コンピュータ
(Scheme 搭載)
式の実行結果
15
が表示される
リストの先頭の要素
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/DJYPN35GJM.jpg)

rest
Scheme の式
(rest (list 15))
を入力すると・・・
コンピュータ
(Scheme 搭載)
式の実行結果
empty
が表示される
リストから先頭の要素を
42
除いた残り


# Page. 43

![Page Image](https://bcdn.docswell.com/page/V7N5XVN8E8.jpg)

例題４．append
• リストをつなげる関数 append を使ってみる
• append は Scheme が備えている関数
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/YJ9Y86RX73.jpg)

「例題４．append 」の手順
1. 次の式を「実行用ウインドウ」で，実行
しなさい
(append (list 1 2) (list 3 4))
(append (list 1 2) (list 3 4) (list 5 6))
(append (list 1 2) 3 (list 4 5))
☆
次は，例題５に進んでください
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/GJ868ZW9ED.jpg)

２つのリストを併合
３つのリストを併合
リストでないものは
併合できない
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/LJL9RDNM7R.jpg)

例題５．リストの基本操作
• リストの３番目の要素を得る関数
element3 を作り，実行する
• first, rest の組み合わせ
例）
１５
８
６
３番目
３２
２３
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/47MZRPX6JW.jpg)

リストの基本操作
• リストの３番目
＝ リストの rest の rest の first
例）
１５
８
rest
６
３２
２３
first
rest
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/P7R6R1NNE9.jpg)

「例題５．リストの基本操作」の手順
1. 次を「定義用ウインドウ」で，実行しなさい
•
入力した後に，Execute ボタンを押す
(define (element3 a-list)
(first (rest (rest a-list))))
2. その後，次を「実行用ウインドウ」で実行しなさい
(element3 (list 1 2 3 4))
(element3 (list 15 8 6 32 23))
☆ 次は，例題６に進んでください
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/PJXMRYN8EX.jpg)

まず，Scheme のプログラムを
コンピュータに読み込ませている
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/3JKGR3NL7D.jpg)

これは，
(element3 (list 15 8 6 32 23))
と書いて，a-list の値を
(list 15 8 6 32 23) に設定しての実行
実行結果である「6」が
表示される
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/LE3N8GV6E5.jpg)

入力と出力
(list 15 8 6 32 23)
6
element3
入力
出力
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/8EDWM18M7G.jpg)

element3 関数
「関数である」ことを
示すキーワード
関数の名前
(define (element3 a-list)
(first (rest (rest a-list))))
値を１つ受け取る（入力）
a-list の値から
３番目の要素を求める（出力）
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/V7P9RQ8QJ8.jpg)

(element3 (list 15 8 6 32 23)) から6が得られる過程
(element3 (list 15 8 6 32 23)) 最初の式
= (first (rest (rest (list 15 8 6 32 23)))) (first (rest (rest a-list)))
に a-list = (list 15 8 6 32 23) が
代入される
= (first (rest (list 8 6 32 23)))
= (first (list 6 32 23))
=6
(rest (list 15 8 6 32 23)) → (list 8 6 32 23)
(rest (list 8 6 32 23)) → (list 6 32 23)
コンピュータ内部での計算
実行結果
53


# Page. 54

![Page Image](https://bcdn.docswell.com/page/2JVMR5NPJQ.jpg)

(element3 (list 15 8 6 32 23)) から6が得られる過程
(element3 (list 15 8 6 32 23))
= (first (rest (rest (list 15 8 6 32 23))))
= (first (rest (list 8 6 32 23)))
これは，
(define
(element3 a-list)
= (first (list
6 32 23))
(first (rest (rest a-list))))
= 6 の a-list を (list 15 8 6 32 23) で置き換えたも
の
54


# Page. 55

![Page Image](https://bcdn.docswell.com/page/5EGGM6KQEL.jpg)

関数 element3 について
• リストの長さが２以下の時には，「エラーメッ
セージ」が表示される
例）
(element3 (list 1 2))
→ エラーメッセージが表示される
55


# Page. 56

![Page Image](https://bcdn.docswell.com/page/4JQXR4NWEP.jpg)

これは，
(element3 (list 1 2))
と書いて，a-list の値を
(list 1 2) に設定しての実行
エラーメッセージが
表示される
56


# Page. 57

![Page Image](https://bcdn.docswell.com/page/K7468QG1E1.jpg)

(element3 (list 1 2)) から
実行エラーに至る過程
(element3 (list 1 2)) 最初の式
= (first (rest (rest (list 1 2)))
(first (rest (rest a-list)))
に a-list = (list 1 2) が
代入される
= (first (rest (list 2))) (rest (list 1 2)) → (list 2)
= (first empty) (rest (list 1)) → empty
コンピュータ内部での計算
→ 「空リスト empty に対して first を実行できない」
という決まりがあるので，実行エラー
57


# Page. 58

![Page Image](https://bcdn.docswell.com/page/LJ1V2PD5EG.jpg)

例題６．シンボル
• ｘ の値から，３種類のシンボル（&#039;Cold, &#039;Warm,
&#039;Hot）のどれかを出力する関数 judge を作り，実
行する
x ≦ 20
→ &#039;Cold
20 &lt; x ≦ 30 → &#039;Warm
30 &lt; x
→ &#039;Hot
シンボル
58


# Page. 59

![Page Image](https://bcdn.docswell.com/page/GJWLR2YWE2.jpg)

「例題６．シンボル」の手順
1. 次を「定義用ウインドウ」で，実行しなさい
•
入力した後に，Execute ボタンを押す
;;judge: number -&gt; symbol
(define (judge x)
(cond
[(&lt;= x 20) &#039;Cold]
[(and (&lt; 20 x) (&lt;= x 30)) &#039;Warm]
[(&lt; 30 x) &#039;Hot]))
2. その後，次を「実行用ウインドウ」で実行しなさい
(judge 15)
(judge 20)
(judge 25)
☆
次は，例題７に進んでください
59


# Page. 60

![Page Image](https://bcdn.docswell.com/page/4EZMRDX2J3.jpg)

まず，Scheme のプログラムを
コンピュータに読み込ませている
60


# Page. 61

![Page Image](https://bcdn.docswell.com/page/Y76NR1P67V.jpg)

ここでは，
(judge 15)
と書いて，x の値を 15
に設定しての実行
実行結果である「&#039;Cold」が
表示される
61


# Page. 62

![Page Image](https://bcdn.docswell.com/page/G75584K574.jpg)

入力と出力
x の値：
15
&#039;Cold
judge
入力
入力は
１つの数値
出力
出力は
１つのシンボル
62


# Page. 63

![Page Image](https://bcdn.docswell.com/page/9J2NKVWGER.jpg)

judge 関数
「関数である」ことを
関数の名前
示すキーワード
;; judge: number -&gt; symbol
(define (judge x)
(cond
[(&lt;= x 20) &#039;Cold]
[(and (&lt; 20 x) (&lt;= x 30)) &#039;Warm]
[(&lt; 30 x) &#039;Hot]))
値を１つ受け取る（入力）
63


# Page. 64

![Page Image](https://bcdn.docswell.com/page/DEYPN3LGEM.jpg)

例題７．数字かシンボルを出力
• ｘ の値から，数字あるいはシンボルを出力する関
数 ast を作り，実行する
• x &gt; 0 ならば： x の値を出力する
• x ≦ 0 ならば： 「&#039;*」を出力する
64


# Page. 65

![Page Image](https://bcdn.docswell.com/page/VJN5XV4878.jpg)

「例題７．数値かシンボルを出力」の手順
1. 次を「定義用ウインドウ」で，実行しなさい
•
入力した後に，Execute ボタンを押す
(define (ast x)
(cond
[(&gt; x 0) x]
[else &#039;*]))
2. その後，次を「実行用ウインドウ」で実行しなさい
(ast 10)
(ast 0)
(ast -10)
☆
次は，例題８に進んでください
65


# Page. 66

![Page Image](https://bcdn.docswell.com/page/YE9Y86QXJ3.jpg)

まず，Scheme のプログラムを
コンピュータに読み込ませている
66


# Page. 67

![Page Image](https://bcdn.docswell.com/page/GE868ZG97D.jpg)

ここでは，
(ast 10)
と書いて，x の値を 10
に設定しての実行
実行結果である「10」が
表示される
67


# Page. 68

![Page Image](https://bcdn.docswell.com/page/LEL9RDGMJR.jpg)

入力と出力
x の値：
10
15
ast
入力
入力は
１つの数値
出力
出力は
１つの数値
あるいはシンボル
68


# Page. 69

![Page Image](https://bcdn.docswell.com/page/4JMZRPQ6EW.jpg)

ast 関数
「関数である」ことを
関数の名前
示すキーワード
(define (ast x)
(cond
[(&gt; x 0) x]
[else &#039;*]))
値を１つ受け取る（入力）
69


# Page. 70

![Page Image](https://bcdn.docswell.com/page/PJR6R18N79.jpg)

例題８．シンボル
• 次の４種のシンボルから，「答え」を返すような
関数 reply を作り，実行する
&#039;GoodMorning →
&#039;HowAreYou
→
&#039;GoodAfternoon →
&#039;GoodEvening
→
答え
&#039;Hi
&#039;Fine
&#039;NeedANap
&#039;BoyAmITired
これ以外の入力に対しては，実行エラー
70


# Page. 71

![Page Image](https://bcdn.docswell.com/page/PEXMRY887X.jpg)

「例題８．シンボル」の手順
1. 次を「定義用ウインドウ」で，実行しなさい
• 入力した後に，Execute ボタンを押す
;;reply: symbol -&gt; symbol
;;to determine a reply for the greeting s
(define (reply s)
(cond
[(symbol=? &#039;GoodMorning s) &#039;Hi]
[(symbol=? &#039;HowAreYou s) &#039;Fine]
[(symbol=? &#039;GoodAfternoon s) &#039;NeedANap]
[(symbol=? &#039;GoodEvening s) &#039;BoyAmITired]))
2. その後，次を「実行用ウインドウ」で実行しなさい
(reply &#039;GoodMorning)
(reply &#039;Hello)
☆
次は，課題に進んでください
71


# Page. 72

![Page Image](https://bcdn.docswell.com/page/3EKGR3KLJD.jpg)

まず，Scheme のプログラムを
コンピュータに読み込ませている
72


# Page. 73

![Page Image](https://bcdn.docswell.com/page/L73N8GZ675.jpg)

ここでは，
(reply &#039;GoodMorning)
と書いて，x の値を &#039;GoodMorning
に設定しての実行
実行結果である「&#039;Hi」が
表示される
73


# Page. 74

![Page Image](https://bcdn.docswell.com/page/87DWM1RMJG.jpg)

ここでは，
(reply &#039;Hello)
と書いて，x の値を &#039;Hello
に設定しての実行
実行エラーが
発生する
74


# Page. 75

![Page Image](https://bcdn.docswell.com/page/VJP9RQWQE8.jpg)

入力と出力
x の値：
&#039;GoodMorning
&#039;Hi
reply
入力
入力はシンボル
出力
出力はシンボル
75


# Page. 76

![Page Image](https://bcdn.docswell.com/page/2EVMR58PEQ.jpg)

reply 関数
;; reply: symbol -&gt; symbol
;; to determine a reply for the greeting s
(define (reply s)
(cond
[(symbol=? &#039;GoodMorning s) &#039;Hi]
[(symbol=? &#039;HowAreYou s) &#039;Fine]
[(symbol=? &#039;GoodAfternoon s) &#039;NeedANap]
[(symbol=? &#039;GoodEvening s) &#039;BoyAmITired]))
76


# Page. 77

![Page Image](https://bcdn.docswell.com/page/57GGM65Q7L.jpg)

よくある間違い
• 本当は「symbol=?」と書くべき．
しかし，「=」と書いている．
• 実行すると，エラー
メッセージが出る
77


# Page. 78

![Page Image](https://bcdn.docswell.com/page/4EQXR4ZW7P.jpg)

条件式の判定順
(define (reply s)
判定順 (cond
① [(symbol=? &#039;GoodMorning s) &#039;Hi]
② [(symbol=? &#039;HowAreYou s) &#039;Fine]
③ [(symbol=? &#039;GoodAfternoon s) &#039;NeedANap]
④ [(symbol=? &#039;GoodEvening s) &#039;BoyAmITired]))
• cond 文に並べた条件式は，上から順に判定され
る
上の例では，①，②，③，④の順に判定が行われ，
①が成り立てば，②，③，④は判定されない
• 条件式の並べ方に意味がある
78


# Page. 79

![Page Image](https://bcdn.docswell.com/page/KJ468Q3171.jpg)

(reply &#039;GoodMorning) から &#039;Hi が得られる過程
(reply &#039;GoodMorning)
= (cond
[(symbol=? &#039;GoodMorning &#039;GoodMorning) &#039;Hi]
[(symbol=? &#039;HowAreYou &#039;GoodMorning) &#039;Fine]
[(symbol=? &#039;GoodAfternoon &#039;GoodMorning) &#039;NeedANap]
[(symbol=? &#039;GoodEvening &#039;GoodMorning) &#039;BoyAmITired])
= (cond
[true &#039;Hi]
[(symbol=? &#039;HowAreYou &#039;GoodMorning) &#039;Fine]
[(symbol=? &#039;GoodAfternoon &#039;GoodMorning) &#039;NeedANap]
[(symbol=? &#039;GoodEvening &#039;GoodMorning) &#039;BoyAmITired]) =
&#039;Hi
79


# Page. 80

![Page Image](https://bcdn.docswell.com/page/LE1V2P157G.jpg)

(reply &#039;GoodMorning) から &#039;Hi が得られる過程
(reply &#039;GoodMorning)
= (cond
[(symbol=? &#039;GoodMorning &#039;GoodMorning) &#039;Hi]
[(symbol=? &#039;HowAreYou &#039;GoodMorning) &#039;Fine]
[(symbol=? &#039;GoodAfternoon &#039;GoodMorning) &#039;NeedANap]
[(symbol=? &#039;GoodEvening &#039;GoodMorning) &#039;BoyAmITired])
= (cond
これは，
[true &#039;Hi]
(cond
[(symbol=? &#039;HowAreYou &#039;GoodMorning) &#039;Fine]
[(symbol=? &#039;GoodMorning s) &#039;Hi]
[(symbol=?
&#039;GoodMorning) &#039;NeedANap]
[(symbol=?&#039;GoodAfternoon
&#039;HowAreYou s) &#039;Fine]
[(symbol=?
&#039;GoodMorning)
&#039;BoyAmITired]) =
[(symbol=?&#039;GoodEvening
&#039;GoodAfternoon
s) &#039;NeedANap]
&#039;Hi [(symbol=? &#039;GoodEvening s) &#039;BoyAmITired])
の s を &#039;GoodMorning で置き換えたもの
80


# Page. 81

![Page Image](https://bcdn.docswell.com/page/GEWLR28W72.jpg)

5-6 課題
81


# Page. 82

![Page Image](https://bcdn.docswell.com/page/47ZMRD82E3.jpg)

課題１
実行結果を報告しなさい
•
•
•
「DrScheme の実行用ウインドウ」で実行して，
実行結果を報告しなさい
「エラー」が出た場合には，「エラー」と記入
すること
(list 1)
(list 1 2)
(list 1 2 3)
(first (list ...))
の実行結果
(rest (list ...))
の実行結果
(first (rest
(list ...))) の実
行結果
(first (rest
(rest(list ...))))
の実行結果
82


# Page. 83

![Page Image](https://bcdn.docswell.com/page/YJ6NR1K6JV.jpg)

課題２
• 最高気温 high と最低気温 low から，真夏日，
夏日，冬日，真冬日を判定する関数 summerwinter-day を作成し，実行結果を報告しなさ
い
• &quot;Tropical Day&quot;
（真夏日，１日の最高気温が３０度以上の日）
• &quot;Summer Day&quot;
（夏日，１日の最高気温が２５度以上の日）
• &quot;Frost Day&quot;
（冬日，１日の最低気温が０度未満の日）
• &quot;Ice Day&quot;
（真冬日，１日の最高気温が０度未満の日）
83


# Page. 84

![Page Image](https://bcdn.docswell.com/page/GJ5584P5J4.jpg)

課題３
• ある年 y のある月 m のある日 d が
存在するかを調べ，存在すれば d
を，存在しなければシンボル「&#039;*」
を返す関数を作成し，実行結果を
報告しなさい
• 例えば，
2004 10 10 ⇒ 10 を出力
2004 10 0 ⇒ &#039;* を出力
2004 10 32 ⇒ &#039;* を出力
84


