Schemeの課題では、”関数を定義せよ”と言われた場合は、defineによる関数定義を含む一連のコードをレポートとしてください。Cのようにmainを定義したり、入出力のためのコードを書いたりしないでください。
ファイルの拡張子は「.scm」にしてください。
Schemeの課題については、ECCSで提供されている実行環境(guile 3.0.5)で動作するコードのみを受理対象とします。
この演習では、特に指定された場合を除いて、「set!」やそれに類する構文等を用いないこととします。
まず、Schemeの練習として、次のコードを処理系で順に実行するとどうなるか予想し、実際に実行した結果(エラーになることもある)と一致するかどうか確認してください。一致しなかった場合にはその理由を考察してください。(レポート提出の必要はありません)
0
(= 1 2)
(define a (+ (- (* (* 1 2) 3) (* 4 5)) (+ (* 6 7) (* 8 9))))
a
(define b (- a 1))
b
(b)
(b + a)
(define c (if (even? a) "even" "odd"))
c
(let ((a 1)) (if (even? a) "even" "odd"))
(let ((a 1)) c)
(define f (lambda (x) (+ x a)))
f
f(a)
(f a)
(f (a))
(define d f)
d
(d b)
((if (even? a) + *) 1 2)
((lambda (x a) (+ x a)) a b)
(define g (lambda (x a) (+ x a)))
(g a b)
(define h (lambda (x) (lambda (a) (+ x a))))
h
((h a) b)
(h a b)
(h a)
((h (f a)) (g a b))
4つの整数を受け取って、そのうち最小の値を返す関数「min-of-four」を定義せよ。ただし、あらかじめ定義されているmin関数を利用してはならない
実行例:
> (min-of-four 3 5 4 6)
3
締切: 11/07 23:59
5つの整数を引数として受け取り、そのうち奇数が偶数より多い場合は真を返し、 そうでない場合は偽を返す述語「even<odd?」を定義せよ。
実行例:
> (even<odd? 7 1 2 4 9)
#t
締切: 11/07 23:59