调用高阶函数时应用程序不是过程

问题描述 投票:0回答:1

我正在编写一个程序,它将以电影形式播放帧列表。但在播放之前,我想对列表中的每个帧应用修改器过程。由于某种原因,当调用更新电影过程时,它会说我的绘制笼过程不是一个过程。尽管很明显是这样。我想我在更新电影过程中做错了什么?

#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 过程直接输入到调用中,但得到了相同的错误

racket higher-order-functions
1个回答
0
投票

(draw-cage (car frameslst))
是一个图像,在第一次递归时,您将其作为第二个参数传递给
update-movie
,它期望它是一个过程。

我怀疑你是故意的

(define (update-movie proc frameslst)
  (if (null? frameslst)
      '()
       (begin
           (proc (car frameslst))
           (update-movie proc (cdr frameslst)))))
© www.soinside.com 2019 - 2024. All rights reserved.