所以我用DrRacket,有一個結構定義爲:形成這種格式DrRacket(或計劃)樹
(define-struct thing (a b))
然後,我有這種格式的例子樹:
(define v (make-thing
(make-thing (make-thing 1 2)
(make-thing 3 4))
(make-thing (make-thing 5 6)
(make-thing 7 8))))
我需要建立一個函數,它接受一個也是2的冪的非正數(如1,2,4,8,16 ...),並輸出數字1(如果n = 1 )或以上述格式製作'東西'。
到目前爲止,我已經嘗試了很多辦法,但我要麼最終得到這樣的:
(make-thing (make-thing (make-thing 1 1)
(make-thing 1 1))
(make-thing (make-thing 1 1)
(make-thing 1 1))))
我無法弄清楚如何正確遞增變量 - 我已經能夠想出如何適用的make-thing
S中的所需數量:
下面的代碼我用現在:
(define (helper pow current)
(cond
((= pow 0) 1)
(else (make-thing
(helper (- pow 1) current)
(helper (- pow 1) (- current 1))))))
(define current 1)
(define (build-thing-or-number n)
(cond
((= n 1) 1)
(else (make-thing
(helper (- (log n 2) 1) current)
(helper (- (log n 2) 1) (add1 current))))))
感謝您的解釋!這工作得很好 – abcd