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

Scheme/Racket中如何用car/cdr从(5 4.x)结构里单独提取x变量

正确操作

你只需要执行如下仅用car/cdr的表达式即可提取到x:

(cdr (car (cdr s)))

错误原因说明

你之前操作失败的核心问题是没有理清s的实际结构:

  • 你定义的s实际是一个双元素列表:(5 (4 . x)),你写的4.x是排版省略了括号和空格的点对结构(4 . x),是列表的第二个元素
  • 你调用(cdr s)得到的是包含点对的单元素列表((4 . x)),并非直接得到点对本身,所以再调用一次cdr只会得到空列表()
  • 你对(car s)(也就是数值5)调用cdr必然报错,因为car/cdr仅支持对pair类型操作,数值不属于pair类型

结构拆解验证

你可以按以下步骤拆解确认每一步的输出:

  • (car s) → 输出 5(列表第一个元素)
  • (cdr s) → 输出 ((4 . x))(列表除第一个元素外的剩余部分,是一个单元素列表)
  • (car (cdr s)) → 输出 (4 . x)(取出单元素列表里的点对)
  • (cdr (car (cdr s))) → 输出 x(取出点对的右半部分,即你需要的变量)

补充说明:如果你定义的s实际是点尾列表(5 4 . x)(你写的'(5 4.x)是漏了4后面的空格),那么直接调用(cdr (cdr s))即可得到x。这种情况下你之前调用(cdr (cdr s))得到空列表,说明你实际定义的s不是点尾列表,而是第二个元素为点对的普通列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03