我正在编写一个程序,它将以电影形式播放帧列表。但在播放之前,我想对列表中的每个帧应用修改器过程。由于某种原因,当调用更新电影过程时,它会说我的绘制笼过程不是一个过程。尽管很明显是这样。我想我在更新电影过程中做错了什么?
#lang racket
(require 2htdp/image)
(require 2htdp/universe)
(define bird-imgs (list ...)) ; --> these are all images in the list, nothing else
(define rate 5)
(define (draw-cage img)
(define cage-frame (rectangle 460 400 "outline" (pen "black" 10 "solid" "round" "round")))
(overlay/align "middle" "middle" cage-frame img))
(define (update-movie proc frameslst)
(if (null? frameslst)
'()
(update-movie (proc (car frameslst)) (cdr frameslst))))
(run-movie (/ 1 rate) (update-movie draw-cage bird-imgs))
错误如下:
application: not a procedure;
expected a procedure that can be applied to arguments
given: (object:image% ... ...)
我尝试将绘制笼过程作为 lambda 过程直接输入到调用中,但得到了相同的错误
(draw-cage (car frameslst))
是一个图像,在第一次递归时,您将其作为第二个参数传递给 update-movie
,它期望它是一个过程。
我怀疑你是故意的
(define (update-movie proc frameslst)
(if (null? frameslst)
'()
(begin
(proc (car frameslst))
(update-movie proc (cdr frameslst)))))