Racket 不会打印图像,除非它 returns 到 REPL

Racket doesn't print an image unless it returns to the REPL

我正在使用 DrRacket 6.4,我想使用 2htdp/image 库显示图像。如果用户键入 "start",将打印图像。但是,在尝试从循环内部显示图像时,我无法显示图像;似乎图像仅在程序具有 "returned".

时显示

这个有效:

(define (showimg p) (place-image
   (triangle 32 "solid" "red")
   24 24
   p))

;; prints an image
(define (a p)
  (define command (read-line))
  (cond [(string=? command "start") (showimg p)]))

(a (empty-scene 160 90))

这不是:

;; should print an image indefinitely
(define (a p)
  (define command (read-line))
  (cond [(string=? command "start") (showimg p)])
  (a (empty-scene 160 90))
)

(a (empty-scene 160 90))

有什么方法可以使用递归(目前如此)使它工作,或者如果需要,可以使用其他方法在显示图像的同时连续获取用户输入?

谢谢。

place-image returns一张图片,没有显示。
当函数 returns 图像时,显示由 REPL 完成。

全部

(cond [(string=? command "start") (showimg p)]) 

正在做的是(可能)创建一个立即被丢弃的图像。

你可以做的是使用print来显示图像,因为DrRacket在打印方面非常聪明。

以下是我相信你想要的效果:

(define (a p)
  (define command (read-line))
  (cond [(string=? command "start") (print (showimg p))])
  (a p))