Racket递归函数运行报错empty?: unbound identifier原因问询
Racket
empty? 未绑定错误原因及解决方案 错误原因
- 未指定正确的Racket语言方言,或者未引入包含
empty?定义的模块:- 代码开头缺少
#lang声明,或者声明的是极简方言如#lang racket/base,这类配置默认不加载empty?的定义 - 若使用DrRacket编辑器,当前选择的教学语言级别未开放
empty?绑定
- 代码开头缺少
解决方案
你可以任选以下任意一种方法修复问题:
- 代码第一行添加
#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
相关产品推荐
相关产品推荐

