递归定义

Recursive Definitions

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

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

在当前状态下,function 只是 returns 空列表,无论输入如何 。然而,它确实敲响了警钟。看起来像实施 powerset 函数的失败尝试:

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

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

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