方案说明

时间:2012-12-02 09:40:08

标签: scheme

我正在阅读一本编程语言书,它要求我解释以下Scheme函数的作用(不确定,有人可以帮忙解释):

(define (x lis)
  (cond ((null? lis) 0) 
        ((not (list? (car lis))) 
         (cond 
          ((eq? (car lis) #f) (x (cdr lis))) 
          (else (+ 1 (x (cdr lis)))))) 
        (else (+ (x (car lis)) (x (cdr lis))))))

1 个答案:

答案 0 :(得分:5)

它计算嵌套列表结构的叶节点数,忽略#f。它使用递归过程:

  • 如果输入是空列表,则这是返回0的基本情况。
  • 如果输入是car不是列表的对:
    • 如果car#f,我们会对cdr进行递归并返回。
    • 否则我们会将car计为1,并将其添加到cdr的递归结果中。
  • 最后,我们对carcdr进行了递归,并将它们加在一起。