用lambda函数表示集合

时间:2013-10-02 03:11:26

标签: functional-programming scheme set

我正在努力理解我真正需要做的事情,并希望得到一些外部输入或指向一个好的参考。我被要求使用程序表示来“实现数字集”。每个集合将是一个参数函数,它接受一个数字并决定该数字是否在集合中。我必须创建的一些函数(我已经读过,可以在一行中定义):

  1. 一个函数,它返回一个以数字作为参数的函数,并检查该数字是否在集合中。
  2. 一个union函数,它返回arg1或arg2
  3. 中所有元素的集合
  4. 上述交叉功能
  5. 返回arg1但不是arg2
  6. 中的元素的函数
  7. 现在我知道这只是封装一个lambda函数,但我想我对如何表示一个集合并在lambda函数中检查它感到困惑?如果有人能指出我正确的方向,我会很感激。

1 个答案:

答案 0 :(得分: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)