递归定义
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) ())
我目前正在学习 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) ())