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

Racket自定义语言解释器三元条件表达式实现调试求助

解决Racket自定义语言三元条件表达式解析失败问题

问题核心

你的parse函数中,三元条件表达式的匹配模式与测试用例的语法结构不匹配,导致无法识别表达式,触发错误。

具体错误点

原parse函数中的三元模式:

`(,test '? ,true ': ,false)

这个模式要求表达式中的?和:必须是带引号的符号(即'?和':),但你的测试用例使用的是不带引号的?和:(比如(10 ? 100 : 200)),两者结构不匹配,因此无法触发对应的解析逻辑。

修正方案

将parse函数中的三元表达式匹配模式修改为:

`(,test ? ,true : ,false)

在Racket的match准引号(quasiquote)语法中,直接写?和:会匹配对应的符号'?和':,与测试用例的语法结构完全一致。

补充:truthy?函数实现

你提到要模拟JavaScript的truthy逻辑,但代码中未给出truthy?的实现,这会导致运行时错误。以下是符合JS规则的实现:

(define (truthy? val)
  (cond
    [(boolean? val) val]          ; 布尔值直接取本身
    [(number? val) (not (zero? val))] ; 非零数字为truthy,0为falsy
    [(string? val) (not (string-empty? val))] ; 非空字符串为truthy
    [else #t]))                   ; 其他类型默认truthy

修正后的完整parse函数

(define (parse expr)
  (match expr
    [(? number?) (num expr)]                      
    [(? string?) (str expr)]                      
    ['TRUE (bool #t)]                            
    ['FALSE (bool #f)]                           
    [`(+ ,x ,y) (add (parse x) (parse y))]         
    [`(- ,x ,y) (sub (parse x) (parse y))]        
    [`(=== ,x ,y) (equals (parse x) (parse y))]   
    [`(,test ? ,true : ,false)                  
     (condt (parse test) (parse true) (parse false))]
    [_ (error "Invalid custom Lang expression")]))

测试验证

修正后,你的测试用例将能够正确解析并运行:

  • (evalcustom '(10 ? 100 : 200)) 会返回100
  • (evalcustom '((- 100 100) ? "a" : "b")) 会返回"b"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:23:13