2

我正在努力理解我真正需要做什么,并且想要一些外部输入或一个好的参考点。我被要求使用程序表示来“实现数字集”。每个集合都是一个单参数函数,它接受一个数字并决定该数字是否在集合中。我必须创建的一些函数(我读过的可以在一行中定义):

  1. 返回一个以数字为参数的函数并检查该数字是否在集合中的函数。
  2. 返回 arg1 或 arg2 中所有元素的集合的联合函数
  3. 上面的交集函数
  4. 返回 arg1 中的元素但不返回 arg2 的函数
  5. 等等

现在我知道这只是包含一个 lambda 函数,但我想我对如何表示一个集合并在 lambda 函数中检查它感到困惑?如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

3

您必须意识到 TODO 列表中的第一个函数是构造函数。其余的我认为是从那里掉下来的。

(define (make-set x) (lambda (y) (eq? x y)))
(define (union x y) (lambda (z) (or (x z) (y z))))
(define (intersection x y) (lambda (z) (and (x z) (y z))))
(define (difference x y) (lambda (z) (and (x z) (not (y z)))))

(define set-5 (make-set 5))
(set-5 4)
(set-5 5)

(define set-45 (union (make-set 4) (make-set 5)))
(set-45 3)
(set-45 5)

(define set-34 (union (make-set 3) (make-set 4)))

(define set-4 (intersection set-34 set-45))
(set-4 3)
(set-4 5)
(set-4 4)

(define set-3 (difference set-34 set-45))
(set-3 4)
(set-3 5)
(set-3 3)
于 2013-10-02T03:56:37.673 回答