跳到主要内容

千葉大学 融合理工学府 数学情報科学専攻 数学・情報数理学コース 2018年8月実施 専門 B12

Author​

祭音Myyura (co-authored with GPT 6 Astra)

Description​

次の Scheme プログラムについて理由付きで答えよ。

(define (r x) (lambda (z) x))
(define (b g f) (lambda (z) ((f (g z)) z)))
(define t1 (b (lambda (z) (* 2 z)) r))
(define t2
(b car (lambda (u) (b cadr (lambda (v) (r (+ u v)))))))
(define (tn f a)
(if (null? f) (r a)
(b (car f) (lambda (u) (tn (cdr f) (cons u a))))))

(1) (t1 2) の値を求めよ。(2) (t2 'ℓ) の値が 00 となる式 ℓ\ell を特徴付けよ。(3) ℓ\ell をリストとしたとき ((tn (list cadr car caddr) '(0)) 'ℓ) の値を求めよ。

题目描述​

阅读上述 Scheme 程序并说明理由。(1) 求 (t1 2)。(2) 描述使 (t2 'ℓ) 返回零的表达式 ℓ\ell。(3) 当 ℓ\ell 为列表时,求指定 tn 调用的结果。

Kai​

(1) 定義から (b g f)(z)=f(g(z))(z)(b\ g\ f)(z)=f(g(z))(z) であり、r(x)r(x) は定数関数である。従って t1 は z↦2zz\mapsto2z で、答えは 4。

(2) 定義を展開すると

(t2 l) = (+ (car l) (cadr l))

である。従って先頭2要素が数値で、その和が 00 となる必要十分条件を満たせばよい。通常のリストなら (a (-a) ...) の形、すなわち第1要素が数 aa、第2要素が数 −a-a のリストである((-a) は評価する式ではなく数値 −a-a を意味する)。car と cadr が定義されれば、残りの末尾は任意でもよい。

(3) ℓ=(ℓ1 ℓ2 ℓ3 …)\ell=(\ell_1\ \ell_2\ \ell_3\ \ldots) とする。tn は各関数を同じ引数 ℓ\ell に適用し、その結果を順に累積リストの先頭へ追加する。従って

(0) -> (l2 0) -> (l1 l2 0) -> (l3 l1 l2 0)

となり、評価結果は (ℓ3 ℓ1 ℓ2 0)。要素が3個未満なら caddr を適用できず、通常はエラーとなる。