練習問題 : リスト構造(簡単なリスト操作)


これでようやくちょっとしたデータ構造を扱うプログラムも書けるようになりました。 問題の選択肢もふえました。すこし幸せ。
1.
整数 n, m (n <= m) に対して、(n n+1 .... m-1 m) なるリスト を返す関数 int-gen を作れ。
> (int-gen 3 10)
(3 4 5 6 7 8 9 10)
解答例

2.
整数のリストと symbol: sum, product をもらって、 その総和、もしくは総積を返す関数 int-list-operator を作れ。
> (int-list-operator (list 1 2 3 4) 'sum)
10
> (int-list-operator (list 1 2 3 4) 'product)
24
解答例

3.
たとえば、(* 1 2 3) というリスト構造(式ではない)が与えられたとします。 これを式と見立てて、その結果を返す関数 calc をつくります。

先頭にくる演算記号(symbol)は、+,-, *, /, max, minとし、 引数はすべて数字(実数)が直接書かれているものとします。

> (define sample+ (list '+ 1 2 3 4 5))
> (define sample* (list '* 1 2 3 4 5))
> (define sample-max (list 'max 1 2 3 4 5))
> sample+
(+ 1 2 3 4 5)
> sample*
(* 1 2 3 4 5)
> sample-max
(max 1 2 3 4 5)
> (calc sample+)
15
> (calc sample*)
120
> (calc sample-max)
5
解答例はなし(2. が出来れば、3も出来るでしょう)


99.10.5/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp