• 検索結果がありません。

Node(Leaf (12 + 3), Leaf 4.5) 答

N/A
N/A
Protected

Academic year: 2021

シェア "Node(Leaf (12 + 3), Leaf 4.5) 答"

Copied!
3
0
0

読み込み中.... (全文を見る)

全文

(1)

IV

通常の方法で起動した状態のocamlにおいて、次の式の値は何になるか。ただし、何らかのエラーになった り評価が停止しないときは×と書け。

1. let x =

let y = 1 + 2 in y + 3 in

x * y

答: × 2. let x = 7 in

let f y = x + y in let x = 3 in f x

答: 10 3. let f g x = g (g x) in

f (fun y -> y * 2) 3

答: 12

以下では、あらかじめ

type ’a tree = Leaf of ’a | Node of ’a tree * ’a tree と定義されていることにする。

4. Node(Leaf (12 + 3), Leaf 4.5)

答: × 5. let rec f t =

match t with Leaf x -> x

| Node(l, r) -> f r ^ " " ^ f l in f (Node(Node(Leaf "this", Leaf "a"), Node(Leaf "is", Leaf "pen")))

答: "pen is a this"

(2)

V

授業で定義した純粋なλ計算において、次の式の簡約結果を、1ステップごとの簡約過程と共に示せ。let 式・自然数・論理値などは、授業で定義したλ式による表現を使用せよ。

例. 1 + 1

答: 1 + 1 = λs.λz.1s(1sz)

= λs.λz.1s((λs.λz.sz)sz)

λs.λz.1s((λz.sz)z)

λs.λz.1s(sz)

= λs.λz.(λs.λz.sz)s(sz)

λs.λz.(λz.sz)(sz)

λs.λz.s(sz) 1. (λx.λy.xy)y

答の例:

(λx.λy.xy)y = (λx.λy0.xy0)y

λy0.yy0 2. (λa.a)(λb.b)((λc.c)(λd.d))

答の例:

(λa.a)(λb.b)((λc.c)(λd.d)) (λb.b)((λc.c)(λd.d))

(λb.b)(λd.d)

λd.d

3. letis zero =λn.n(λm.false)true in is zero 2 答の例:

letis zero =λn.n(λm.false)true inis zero 2 = (λis zero.is zero 2)(λn.n(λm.false)true)

(λn.n(λm.false)true)2

2(λm.false)true

= (λs.λz.s(sz))(λm.false)true

(λz.(λm.false)((λm.false)z))true

(λm.false)((λm.false)true)

false

(3)

講評・解説

IVの1.を18とした者がやや多かったが、x * yのyがlet y = 1 + 2 in ...のスコープ外にあるの で、エラーとなる。

IVの2.はよくできていた。

IVの3.を×とした者はレジュメで「高階関数」の節をよくみること。

IVの4.はよくできていた。

IVの5.で二重引用符" "を忘れた者が極めて多かったが、MLであろうとCであろうと、ほとんどのプ ログラミング言語においてxと"x"の意味はまったくことなるので、誤答とした。

Vの1.はよくできていた。

Vの2.もよくできていたが、

(λa.a)(λb.b)((λc.c)(λd.d)) (λa.a)((λc.c)(λd.d)) などと簡約した答案がいくつかあった。しかし、関数適用は左結合的だから

(λa.a)(λb.b)((λc.c)(λd.d)) は

((λa.a)(λb.b))((λc.c)(λd.d)) であって

(λa.a)((λb.b)((λc.c)(λd.d)))

ではないので、(λb.bをλa.aα変換しない限り)そのような簡約はできない。よって、α変換したこ とがわかるように書かれていなければ誤答とした。

Vの3.は思ったよりできていたが、代入で括弧をつけ忘れた者や、e1e2e3という形の式をe1(e2e3)と間 違えた者が多かった。

参照

関連したドキュメント

子どもたちは、全5回のプログラムで学習したこと を思い出しながら、 「昔の人は霧ヶ峰に何をしにきてい

海なし県なので海の仕事についてよく知らなかったけど、この体験を通して海で楽しむ人のかげで、海を

夫婦間のこれらの関係の破綻状態とに比例したかたちで分担額

 講義後の時点において、性感染症に対する知識をもっと早く習得しておきたかったと思うか、その場

これまで、実態が把握できていなかった都内市街地における BVOC の放出実態を成分別 に推計し、 人為起源 VOC に対する BVOC

自分ではおかしいと思って も、「自分の体は汚れてい るのではないか」「ひどい ことを周りの人にしたので

次のいずれかによって算定いたします。ただし,協定の対象となる期間または過去