Racket递归绘制彩虹形状函数仅输出Empty List问题求助
问题原因
你的代码存在两个核心问题导致无法输出预期图形:
- Racket 中函数的返回值为分支内最后一个表达式的执行结果,你在
else分支中生成的circle图形没有被保存或返回,直接被丢弃,递归执行到最后只会返回基础 case 的"Empty List"字符串。 - 你没有将逐个生成的图形按顺序拼接,即使返回单个图形也无法一次性展示所有颜色的图形。
修复后可运行代码
#lang slideshow (require 2htdp/image) (define a (list "red" "Orange" "Yellow" "Green" "Blue" "Purple")) (define (Rainbow lst) (cond [(empty? lst) empty-image] ; 空列表返回空图形作为拼接基底 [else ; 横向拼接当前颜色的圆与后续递归生成的图形 (beside (circle 20 "solid" (first lst)) (Rainbow (rest lst)))])) ; 空列表时输出提示,非空输出拼接完成的图形 (if (empty? a) "Empty List" (Rainbow a))
可选调整项
- 如需竖向排列图形,将拼接函数
beside替换为above即可 - 如需图形之间增加间隙,可在拼接逻辑中插入空隙图形,示例:
(beside (circle 20 "solid" (first lst)) (rectangle 10 0 "solid" "white") (Rainbow (rest lst)))可实现圆形之间增加10像素的横向间隔
内容的提问来源于stack exchange,提问作者Knasin CSGO
相关产品推荐
相关产品推荐

