我正在练习2.32,它提供了以下代码:
(define (subsets s)
(if (null? s)
(list nil)
(let ((rest (subsets (cdr s))))
(append rest (map <??> rest)))))
当我尝试在麻省理工学院计划9.2中调用rest
程序时,它不会识别该程序(书中有nil
的类似问题,由{{()
取代现代方案中的1}}。现代计划中的等效rest
程序是什么?我不相信它是cdr
,因为整本书都使用了cdr
。
答案 0 :(得分:5)
你误解了练习 - rest
不是一个过程,是一个局部变量,它对应于子集的 rest (也许你应该看一下关于let
)documentation。这就是本书所要求的:
(define (subsets set)
(if (null? set)
(list '())
(let ((rest (subsets (cdr set))))
(append rest
(map (lambda (sets) (cons (car set) sets))
rest)))))
答案 1 :(得分:4)
正如@tfb指出的那样,此代码中的rest
不是一个过程,它是一个本地绑定的符号。
也许您误解了有关rest
的错误消息;没有看到它,很难说。