2012-12-02 134 views
0

我讀一個編程語言的書,它要求我解釋下列方案的功能是什麼(不知道,有人可以幫忙解釋一下):方案說明

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

回答

5

它計算葉節點的數量一個嵌套的列表結構,忽略#f。它使用一個遞歸過程:

  • 如果輸入是一個空的列表中,這是一個返回0。
  • 如果輸入的是一對,其car基本情況是不是一個列表:
    • 如果car#f,我們在cdr上遞歸併返回。
    • 否則,我們將car計爲1,並將其添加到cdr上的遞歸結果中。
  • 最後,我們對carcdr進行遞歸,並將它們加在一起。
+0

如果我想將它轉換爲編程語言clojure,我該怎麼做呢? – user1585646

+0

難道你不認爲你自己嘗試一下會學到更多東西嗎?如果您遇到問題,請發佈一個新問題,我們將幫助您瞭解您出錯的位置。 – Barmar

+0

@ user1585656:Clojure是類似Scheme的Lisp語言,所以它不需要太多工作來轉換它。它非常直截了當,您應該可以通過查找Scheme中的函數並查找Clojure等價物來完成它。如果你被困在某個特定的東西上,那就問問,但如果你先給它一個鏡頭並顯示你做了什麼,你會得到更多的幫助。如果人們相信自己已經做出了自己的貢獻,那麼很多人都會幫助你。 – RonaldBarzell