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

DrRacket运行火箭动画代码报错:开括号后预期函数却得到数字

Racket火箭动画代码报错原因及修复方案

核心报错原因

  • 操作符与操作数缺少空格:Racket语法要求括号内第一个元素为函数,后续为参数,彼此必须用空格分隔。你写的(-500(* 3 0))中-和500没有空格,Racket会把-500识别为数字,括号首元素不是函数就会触发你收到的报错;同理(*3 t)中*和3无空格也会触发同类问题。
  • 函数与变量调用混淆:你提前用(define height 500)把height定义为存储数值的变量,但后续代码错误地把height当作计算高度的函数调用,而你实际定义的高度计算函数名为altitude,变量无法作为函数调用,也会触发同类报错。
  • 火箭图像未正确初始化:(define rocket (image))中的image是构造函数,需要传入宽、高、模式、颜色参数,空调用会触发额外报错。

修复后的完整代码

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

(define width 500)
(define height 500)

(define e-scene (empty-scene width height))
; 定义红色矩形作为火箭示例,可自行替换为其他图像
(define rocket (rectangle 20 50 "solid" "red"))
(define rocket-x (/ width 2))

; 减号与500之间添加空格
(define H0 (- 500 (* 3 0)))
(define H10 (- 500 (* 3 10)))
; 调用正确的高度计算函数altitude,而非变量height
(check-expect (altitude 0) H0)
(check-expect (altitude 10) H10)

(define (altitude t)
  ; 补全空格:减号与500之间、*与3之间都添加空格
  (- 500 (* 3 t)))

(define img0 (place-image rocket rocket-x (altitude 0) e-scene))
(define img45 (place-image rocket rocket-x (altitude 45) e-scene))
(check-expect (create-rocket-scene 0) img0)
(check-expect (create-rocket-scene 45) img45)

(define (create-rocket-scene t)
  ; 火箭升至顶部后返回#f停止动画
  (if (<= (altitude t) 0)
      #f
      (place-image rocket rocket-x (altitude t) e-scene)))

(animate create-rocket-scene)

额外说明

操作符与操作数之间必须加空格是Lisp系语言(包含Racket)的基础语法规范,写代码时注意遵守即可避免同类识别错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:24:03