Functional programming 在DrRacket(或Scheme)中使用此格式生成树
因此,我使用DrRacket并将结构定义为:Functional programming 在DrRacket(或Scheme)中使用此格式生成树,functional-programming,scheme,binary-tree,racket,Functional Programming,Scheme,Binary Tree,Racket,因此,我使用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)
(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))))))
为了便于验证,我将其定义为透明
(define (helper level max)
(if (equal? (/ level 2) 1)
(make-thing (- max 1) max)
(make-thing (helper (/ level 2) (- max (/ level 2))) (helper (/ level 2) max))))
max等于当前事物中的最大值
级别是相同形状的最简单(读取最低值)对象中的最高数字(即(对象(对象5 6)(对象7 8))的最大值为8,级别为4)
正如您所看到的,helper完成了所有的工作。请允许我调用您的
构建对象或号码
只需g
,这样我就可以少打字了
所以你想要
(g1)=1;你已经准备好了
(g2)=(事物12)
(g4)=(事物(事物12)(事物34))
(g8)=(事物(事物12)(事物34));1..4
(事(事5 6)(事7 8));5..8
我们看到,如果我们有更多的参数,这将更容易做到:
(定义(h a b);从…到
(续)
(=(+A1)b);类似于(H12):
把东西做成;把东西做成
(其他;例如:(H14)(H58)
(let([c(/(+ab-1)2)];c=2c=6
(制造东西;c是中间的
(h a c);使前半部分为1..2 1..4
(h)(""""""");;第二个3..4 5..8
我们只是把它当作
(定义(g b)
(cond(=b1)1)
(其他(h…))
就这样 与透明的接触很好。
(define (helper level max)
(if (equal? (/ level 2) 1)
(make-thing (- max 1) max)
(make-thing (helper (/ level 2) (- max (/ level 2))) (helper (/ level 2) max))))
(define (build-thing-or-number n)
(cond
((= n 1) 1)
(else (helper n n))))