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

Scheme中仅用car与cdr提取列表元素报错如何解决

报错原因

Scheme语法规则中,除quote等特殊形式外,所有被圆括号包裹的表达式都会被解析为过程调用:括号内第一个元素为待调用的过程,后续元素为传入过程的参数。
你编写的代码中((0) (42 #t) (bar))这一结构触发了语法错误:

  • 外层括号被判定为过程调用,首先求值第一个子表达式(0)得到结果0
  • 解释器尝试将0作为过程执行,传入参数为(42 #t)和(bar)的求值结果
  • 由于0是数值类型,并非可调用的过程,因此抛出对应报错。

注:如果你想要表达一个由(0)、(42 #t)、(bar)三个子列表组成的嵌套列表,需要用'(quote 符号)对列表做引用,避免被解释器识别为过程调用。

正确提取方案

仅使用car和cdr提取42的逻辑如下:

  1. 对添加了引用标记的目标列表执行cdr操作,得到除第一个元素外的剩余部分:((42 #t) (bar))
  2. 对上述结果执行car操作,得到第二个子列表:(42 #t)
  3. 对该子列表执行car操作,即可得到目标值42

正确代码如下:

(car (car (cdr '((0) (42 #t) (bar)))))

内容的提问来源于stack exchange,提问作者N.A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:00