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

Racket递归函数运行报错empty?: unbound identifier原因问询

Racket empty? 未绑定错误原因及解决方案

错误原因

  • 未指定正确的Racket语言方言,或者未引入包含empty?定义的模块:
    1. 代码开头缺少#lang声明,或者声明的是极简方言如#lang racket/base,这类配置默认不加载empty?的定义
    2. 若使用DrRacket编辑器,当前选择的教学语言级别未开放empty?绑定

解决方案

你可以任选以下任意一种方法修复问题:

  1. 代码第一行添加#lang racket声明,默认全量Racket方言内置empty?定义,修改后完整代码如下:
#lang racket
(define (more xs ys)
        (if (empty? ys)
                (if (empty? xs) #false #true)
        (if (empty? xs) #false (more (cdr xs) (cdr ys)))))
        

(writeln (more '(1 2 3) '(1 2)))
(writeln (more '(1 2 3) '(0 1 2 3)))
(writeln (more '(1 2 3) '(0 1 2)))

运行后输出为#t、#f、#f,符合需求预期。
2. 如果你需要使用#lang racket/base,可在代码开头添加导入语句(require racket/list)获取empty?定义。
3. 不需要改动模块引入的话,可以把所有empty?替换为Racket原生内置的null?,两者对列表的判空功能完全一致,不需要修改原有逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:36:02