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

如何在Racket的Plait语言中关联两个列表生成关联项列表?

解决方法

首先,你完全可以用map(Plait里用map2)来实现这个需求,make-assoc作为普通函数完全能在lambda里调用,之前的语法问题大概率是没正确使用多参数的map函数。

用多参数Map实现

Plait 版本

(map2 (lambda (key val) (make-assoc key val)) '(a b c d) '(1 2 3 4))

map2是Plait专门处理两个列表的映射函数,会依次取两个列表的对应元素,传给lambda生成make-assoc实例,最终返回目标列表。

Racket 版本

Racket的map本身支持多参数,直接用:

(map (lambda (key val) (make-assoc key val)) '(a b c d) '(1 2 3 4))

手动递归实现(不用Map)

如果想自己实现逻辑,写个递归辅助函数更直观:

(define (pair->assoc keys vals)
  (cond
    [(and (empty? keys) (empty? vals)) empty]
    [(or (empty? keys) (empty? vals)) (error "两个列表长度必须一致")]
    [else (cons (make-assoc (first keys) (first vals))
                (pair->assoc (rest keys) (rest vals)))]))

调用(pair->assoc '(a b c d) '(1 2 3 4))就能得到预期结果。

关于Append的说明

append是用来拼接多个列表的,比如把'(1 2)和'(3 4)变成'(1 2 3 4),它没法帮你把两个列表的元素一一配对生成make-assoc实例,所以这个场景用不上append。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:35:30