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

DrRacket Scheme中替换列表内每个元组首元素为数字的实现方法

嘿,这事儿不难搞定!我来给你写个在DrRacket里处理这个列表的方案,一步一步来~

首先得明确你需要的首元素到数字的映射规则,我先默认用下面这个映射(要是你的规则不一样,改起来超简单):

  • R → 1
  • p → 2
  • t → 3

接下来我们写代码实现:

完整代码示例

; 第一步:定义首元素到对应数字的转换函数
(define (elem-to-num elem)
  (cond
    [(eq? elem 'R) 1]
    [(eq? elem 'p) 2]
    [(eq? elem 't) 3]
    [else elem])) ; 遇到未知元素就保持原样,避免报错

; 第二步:处理单个点对(就是你列表里的每个(R.1)这种元素)
(define (process-pair a-pair)
  ; 把点对的首元素换成对应数字,保留后面的数值部分
  (cons (elem-to-num (car a-pair)) (cdr a-pair)))

; 第三步:处理整个列表
(define original-list '((R . 1) (R . 5) (R . 2) (R . 4) (p . 3) (t . 6) (R . 7)))
(define result-list (map process-pair original-list))

; 运行后查看结果
result-list

运行结果

当你在DrRacket里运行这段代码,会得到:

'((1 . 1) (1 . 5) (1 . 2) (1 . 4) (2 . 3) (3 . 6) (1 . 7))

灵活调整的小技巧

  • 如果你的映射规则变了(比如R要对应0,t对应9),直接修改elem-to-num函数里的返回值就行,比如把[(eq? elem 'R) 1]改成[(eq? elem 'R) 0]。
  • 要是你的列表元素不是点对(比如是(R 1)这种普通列表),只需要把process-pair函数里的(cdr a-pair)改成(cadr a-pair),然后把cons换成list,就能得到(1 1)这种结构的结果啦。

内容的提问来源于stack exchange,提问作者D.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:09