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

Scheme后缀表达式代码报错求助:未绑定标识符e问题

Scheme后缀表达式实现报错解决

错误原因

你代码里的(eval '(e (car s) (cadr s)))存在问题:引号'创建的是字面表达式,这里的e是一个未绑定的符号,而不是变量e当前存储的操作符(比如+)。eval尝试执行符号e时自然会报未绑定标识符的错误。

修正后的代码

(define (stackupdate e s)
  (if (number? e)
      (cons e s)
      (cons (eval (list e (car s) (cadr s))) (cddr s)))) ; 用list构造正确的运算表达式
(define (postfixhelper lst s)
  (if (null? lst)
      (car s)
      (postfixhelper (cdr lst) (stackupdate (car lst) s))))
(define (postfix list)
  (postfixhelper list '()))
(postfix '(1 2 +)) ; 运行结果为3

代码说明

  • 将'(e (car s) (cadr s))替换为(list e (car s) (cadr s)),这样会用变量e的实际值(比如传入的+)来构造可执行的运算表达式,eval就能正确识别并执行对应的操作。
  • 也可以用准引用+反引用的写法实现相同效果:(eval (,e (car s) (cadr s))),不过用list`构造表达式更直观易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:36:21