咨询其他Lisp/类Lisp中与Clojure assoc/assoc-in对等的函数名及跨Lisp对照资源
不同Lisp/类Lisp语言对等
assoc、assoc-in功能的命名 单层级键值关联(对应assoc核心语义)
- Common Lisp:无原生通用不可变键值关联函数,原生场景通常通过
setf搭配对应容器的访问器完成写入,比如操作属性表搭配getf、操作数组搭配aref;社区公共库Alexandria提供的通用集合写入函数,按容器类型分别命名为alist-set、plist-set - Racket(Scheme主流实现):哈希容器单层级值更新的对应函数命名为
hash-set,带!后缀的hash-set!表示原地修改的可变版本 - Janet:单层级表写入的核心函数命名为
put,同时兼容多参数传入的深层路径写入逻辑 - Hy(Python宿主的Lisp方言):完全沿用Clojure命名习惯,通过
assoc实现单层级字典值写入
深层路径值更新(对应assoc-in核心语义)
这类功能的跨语言命名本身就存在不少参考Clojure设计的案例,比如JS端函数式库Ramda就将对标assoc-in的实现命名为assocPath。各Lisp/类Lisp语言的对应实现命名差异较大:
- Common Lisp:无原生对标实现,社区通用实现多采用
pathwrite、set-path的命名逻辑,部分第三方框架为降低Clojure迁移成本,会直接复用assoc-in的原生命名 - Racket:可变场景下通过
hash-set*!完成多层嵌套哈希的批量路径写入,不可变链式更新场景的对应函数为hash-update/in - Janet:复用单层级的
put函数,传入连续多段嵌套键时自动触发深层写入逻辑,无独立的深层更新函数命名 - Fennel(Lua宿主的Lisp方言):深层路径更新的核心函数命名为
tset,支持直接传入嵌套键路径完成值写入
跨Lisp功能对照的参考资源
可用于跨语言相似功能命名差异查阅、同名函数行为对比的「罗塞塔石碑」类参考资源主要有几类:
- Lisp Cookbook:按编程场景分类收录各主流Lisp方言的常用实现,会专门标注不同语言下同语义功能的命名差异、同名函数的行为偏差
- Rosetta Code 平台的Lisp分类板块:按通用编程任务索引各Lisp方言的实现方式,可快速定位同一场景下的不同设计思路、命名习惯
- 各Lisp方言的官方迁移指南:比如Clojure到Common Lisp、Racket到Janet的官方迁移文档,会专门汇总Clojure核心API(包括
assoc、assoc-in系列)对应的本地实现命名、参数规则、副作用差异 - 跨语言社区维护的Clojure核心API对照表:这类文档由函数式编程社区自发整理,覆盖其他Lisp方言、多语言函数式库中对标Clojure核心API的命名、参数顺序、行为差异,是很多团队制定跨语言函数式命名标准的核心参考
内容的提问来源于stack exchange,提问作者Suni
相关产品推荐
相关产品推荐

