Image 翻转图像似乎使用惰性评估

Image 翻转图像似乎使用惰性评估,image,racket,lazy-evaluation,Image,Racket,Lazy Evaluation,我正在尝试使用球拍“2htdp/image”翻转图像列表 下面是一个不起作用的最小示例: #lang racket (require 2htdp/image) (define images (list (bitmap "../data/player/player1.png") (bitmap "../data/player/player2.png") (bitmap "../data/player/player3.png"))) (define flipped

我正在尝试使用球拍“2htdp/image”翻转图像列表

下面是一个不起作用的最小示例:

#lang racket
(require 2htdp/image)
(define images 
  (list
     (bitmap "../data/player/player1.png")
     (bitmap "../data/player/player2.png")
     (bitmap "../data/player/player3.png")))
(define flipped (map flip-horizontal images))
在我看来(由于DrRacket中绘制图像的速度),列表“翻转”的内容被惰性地评估。这意味着只有当我尝试访问图像时,它的翻转版本才会被计算。一旦我将此球拍文件导入到一个宇宙(使用“2htdp/universe”)中,这就会成为一个问题,因为最初使用翻转图像时,我的性能很差

我看了一下“水平翻转”的原理,我看不出任何明显的原因。不过,我还没有研究“maketranslate”和“makeimage”的实现

我无法使用force强制计算图像,调试器将object:image显示为列表内容。我不确定到底发生了什么,以及如何防止该问题,并在启动时实际计算所有图像

知道为什么会发生这种情况和/或如何正确修复它吗?谢谢

经批准的答案是我问题的解决方案,因此我最后将最后一行改为:

(define flipped (map (compose freeze flip-horizontal) images))

您是对的,直到显示图像内容时,才实际计算图像内容。如果需要提前计算,可以使用,它将图像转换为位图

在您的示例中,尝试将翻转的
的定义更改为以下内容:

(define flipped (map (compose1 freeze flip-horizontal) images))