球拍彩虹形状递归
Racket Rainbow Shape Recursion
我正在尝试在 Racket 中创建一个递归函数,从颜色列表中,该函数将按照该颜色顺序打印出多个形状。但是,该函数只打印“空列表”。
#lang slideshow
(require 2htdp/image)
(define a (list "red" "Orange" "Yellow" "Green" "Blue" "Purple"))
(define (Rainbow lst)
(cond
[(empty? lst) "Empty List"]
[else (circle 20 "solid" (first lst))
(Rainbow (rest lst))]))
(Rainbow a)
REPL 中的显示是在函数 returns 图像时完成的。您的调用 (Rainbow a)
可以重写为 (begin (circle 20 "solid" ...) ...)
的序列(cond
具有隐式开始,因此在每个递归步骤中,添加一个 begin
),以 "Empty List"
和 begin
returns 最后一个表达式,所以 "Empty List"
最后返回:
> (begin (circle 20 "solid" "Red")
(begin (circle 20 "solid" "Orange")
(begin (circle 20 "solid" "Yellow")
"Empty List")))
"Empty List"
但是您可以使用 print
并将该图像打印到 REPL 中:
#lang slideshow
(require 2htdp/image)
(define a (list "Red" "Orange" "Yellow" "Green" "Blue" "Purple"))
(define (Rainbow lst)
(cond
[(empty? lst) (void)]
[else (print (circle 20 "solid" (first lst)))
(Rainbow (rest lst))]))
(Rainbow a)
请注意,我使用了 void
,因此我的 REPL 仅包含彩色圆圈,没有其他文本。
我正在尝试在 Racket 中创建一个递归函数,从颜色列表中,该函数将按照该颜色顺序打印出多个形状。但是,该函数只打印“空列表”。
#lang slideshow
(require 2htdp/image)
(define a (list "red" "Orange" "Yellow" "Green" "Blue" "Purple"))
(define (Rainbow lst)
(cond
[(empty? lst) "Empty List"]
[else (circle 20 "solid" (first lst))
(Rainbow (rest lst))]))
(Rainbow a)
REPL 中的显示是在函数 returns 图像时完成的。您的调用 (Rainbow a)
可以重写为 (begin (circle 20 "solid" ...) ...)
的序列(cond
具有隐式开始,因此在每个递归步骤中,添加一个 begin
),以 "Empty List"
和 begin
returns 最后一个表达式,所以 "Empty List"
最后返回:
> (begin (circle 20 "solid" "Red")
(begin (circle 20 "solid" "Orange")
(begin (circle 20 "solid" "Yellow")
"Empty List")))
"Empty List"
但是您可以使用 print
并将该图像打印到 REPL 中:
#lang slideshow
(require 2htdp/image)
(define a (list "Red" "Orange" "Yellow" "Green" "Blue" "Purple"))
(define (Rainbow lst)
(cond
[(empty? lst) (void)]
[else (print (circle 20 "solid" (first lst)))
(Rainbow (rest lst))]))
(Rainbow a)
请注意,我使用了 void
,因此我的 REPL 仅包含彩色圆圈,没有其他文本。