方案说明

use*_*646 0 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))))))
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

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

  • 如果输入是空列表,则这是返回0的基本情况.
  • 如果输入是一个car不是列表的对:
    • 如果car#f,我们递归cdr并返回.
    • 否则我们将其计car为1,并将其添加到递归的结果上cdr.
  • 最后,我们对递归既carcdr,并把它们相加.