また新しい用語が出てきた。
レル(rel)というのは、ペアの集合(セット)らしい。レルの例:
- ((apples peaches) (pumpkin pie))
- ((4 3) (4 2) (7 6) (6 2) (3 4))
まあ、これはわかる。ファンのほうはよくわからない。「ここではファンは関数(function)を表すために使います。」といいながら、次の質問「(fun? rel) はなんですか。ここで rel は ((8 3) (4 2) (7 6) (6 3) (3 4)) です。」に対して「#tです。というのは (firsts rel) が集合だからです。」と答えている。どういうことさ。
まあいい。ファンは (firsts rel) が集合になるレルだと思っておこう。
で、fun? を set? と firsts を使って書け、と。(その前に set? と firsts を mymodule.scm に追加しておこう)
(use mymodule) (define fun? (lambda (rel) (set? (firsts rel)))) (print (fun? '((8 3) (4 2) (7 6) (6 2) (3 4)))) (print (fun? '((b 4) (b 0) (b 9) (e 5) (g 4))))
実行結果:
^o^ > gosh -I. fun.scm #t #f
うまくいったようだ。
さて、もうひとつ、有限関数という言葉が出てくる。「有限関数とは、ペアのリストであって、各ペアの第1要素はほかのどのペアの第1要素とも同じでないものと表現できます。」とある。それってファンのことじゃないの?