You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用高阶函数时出现「Application not a procedure」错误排查(Racket)

问题分析与解决

你的错误根源在于update-movie的递归逻辑错误:每次递归调用时,你把proc处理当前帧后得到的图像当成了新的proc参数传入,而不是保留原有的处理过程proc。当第二次递归执行时,程序会尝试把这个图像当作过程调用,自然抛出“不是过程”的错误。

另外你的代码里还有一个语法错误:define rate 5)缺少左括号,应该写成(define rate 5)。

修正后的代码

#lang racket

(require 2htdp/image)
(require 2htdp/universe)

(define bird-imgs (list ...)) ; 这里填入你的图像列表
(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)
      '()
      ; 用cons把当前帧处理后的结果和剩余帧的处理结果拼接,递归时保留原proc
      (cons (proc (car frameslst))
            (update-movie proc (cdr frameslst)))))

(run-movie (/ 1 rate) (update-movie draw-cage bird-imgs))

关键修正说明

  • 原递归调用(update-movie (proc (car frameslst)) (cdr frameslst))错误地将处理后的图像作为新的proc传入,修正后通过cons把处理好的图像加入结果列表,同时递归时仍传递原处理过程proc。
  • 修复了define rate 5)的语法错误,补充左括号。

内容的提问来源于stack exchange,提问作者Gulez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:45:57