简体   繁体   中英

Scheme Explanation

I am reading a programming languages book and it is asking me to to explain what the following Scheme function does (not sure, can someone help explain):

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

It counts the number of leaf nodes a nested list structure, ignoring #f . It uses a recursive procedure:

  • If the input is an empty list, this is the base case that returns 0.
  • If the input is a pair whose car is not a list:
    • If the car is #f , we recurse on the cdr and return that.
    • Otherwise we count the car as 1, and add that to the result of recursing on the cdr .
  • Finally, we recurse on both the car and cdr , and add them together.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM