【问题标题】:representing sets with lambda functions用 lambda 函数表示集合
【发布时间】:2013-10-08 09:26:54
【问题描述】:

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

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

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

【问题讨论】:

  • 我想知道您是否误读了其中一些内容。特别是数字 4。一般来说,如果你可以定义一个集合,例如,{x | x > 2}(大于 2 的数字集合),你可以用函数 (lambda (x) (> x 2)) 来识别它,因为这个函数足以识别集合的元素:当且仅当n 在集合中时,使用n 调用该函数时返回true。所以数字 4 将返回任何元素,而是一个新函数,表示包含第一个集合中的元素的集合,而不是第二个集合中的元素。这些函数通常称为characteristic,或
  • indicator functions。另外,你能澄清一下数字1吗?第一个函数将什么作为参数?它返回的函数将什么作为参数?
  • 也许here的讨论会有所帮助。

标签: functional-programming scheme set


【解决方案1】:

您必须意识到 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多