Recursion 递归定义

Recursion 递归定义,recursion,racket,r5rs,Recursion,Racket,R5rs,我目前正在学习Scheme中的递归。我找到了这个递归定义,但我不明白它试图做什么。如果有人能给我解释一下,我将不胜感激。定义如下: (define (function ls) (if (null? ls) '() (append (map (lambda (x) (cons (car ls) x)) (function (cdr ls)) ) (function (c

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

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

在当前状态下,
函数
只返回空列表,而不管输入是什么。然而,它确实敲响了警钟。执行该功能的尝试似乎失败:

(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) ())

在当前状态下,
函数
只返回空列表,而不管输入是什么。然而,它确实敲响了警钟。执行该功能的尝试似乎失败:

(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) ())