【问题标题】:Recursive Definitions递归定义
【发布时间】:2020-03-26 16:01:49
【问题描述】:

我目前正在学习 Scheme 中的递归。我找到了这个递归定义,但我不明白它想做什么。如果有人可以向我解释,我将不胜感激。这是定义:

(define (function ls)
    (if (null? ls) '()
        (append
            (map (lambda (x) (cons (car ls) x))
                 (function (cdr ls))
            )
            (function (cdr ls))
        )
    )
)

【问题讨论】:

    标签: recursion racket r5rs


    【解决方案1】:

    在其当前状态下,function 仅返回空列表,无论输入如何。然而,它确实敲响了警钟。看来实现powerset 函数的尝试失败了:

    (define (powerset ls)
      (if (null? ls)
          '(())
          (append (map (lambda (x) (cons (car ls) x))
                       (powerset (cdr ls)))
                  (powerset (cdr ls)))))
    

    你能看出区别吗?您代码中的基本情况是错误的!如果您想知道,powerset 返回列表的所有可能子集的集合:

    (powerset '(1 2 3))
    => '((1 2 3) (1 2) (1 3) (1) (2 3) (2) (3) ())
    

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2021-10-22
      • 2014-12-03
      • 1970-01-01
      相关资源
      最近更新 更多