语法 – 动态让Clojure中的列表解构

我有一个let语句,我想动态地构造一个列表.以下是我的解决方案:

symList  ;; list of some Strings which will become the vector of Symbols to assign to
valList  ;; list of some values, same length as symList

(let [(map read-string symList) valList]
  ...)

symList的示例值为(“pt1”“pt2”),valList的示例值为(1 2)

但是,这会产生一个例外,即第一部分是“不支持的绑定形式”.我怀疑我遗漏了有关语法引用的内容,或者说这是不可能的.任何建议将不胜感激.

编辑:我只会知道这些值是运行时间,因此这种方法.其次,我需要能够在以后传递词法范围,因此使用let.

最佳答案 如果symList和valList在编译时具有正确的值,那么您可以编写一个宏来执行此操作.如果它们仅在运行时已知,则您将不得不使用/编写函数来为您进行解构,并将该解构的结果作为某种数据结构返回.

在第二种情况下,对于像这样简单的事情,您可以使用(zipmap symList valList)来获取地图.

点赞