给定结构layer
:
(define-struct layer [color doll])
我正在尝试编写一个能够生成所有玩偶颜色的函数。
; colors: Russian doll (RD) -> String
; consumes an RD and produces a string of all colors
(define (colors an-rd)
(cond
[(string? an-rd) (string-append an-rd ",")]
[else
(colors (layer-doll an-rd))]))
(colors
(make-layer
"yellow"
(make-layer
"green" "red")))
我希望colors
函数在给定上述输入的情况下生成yellow, green, red
;但是,它只返回red
。我在这里做错了什么?
答案 0 :(得分:2)
基本情况正确(它应该只返回一个字符串),因此对string-append
的调用是在错误的地方;我们的想法是在每次递归调用时附加一段字符串,直到没有更多的部分。试试这个:
(define (colors an-rd)
(cond
[(string? an-rd) an-rd]
[else
(string-append (layer-color an-rd)
", "
(colors (layer-doll an-rd)))]))
例如:
(colors
(make-layer
"yellow"
(make-layer
"green" "red")))
=> "yellow, green, red"