我有一个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
。
答案 0 :(得分:2)
如果symList和valList在编译时具有正确的值 ,那么您可以编写一个宏来执行此操作。如果只在运行时知道它们,那么您将不得不使用/编写一个函数来为您进行解构,并将该解构的结果作为一些数据结构返回。
在第二种情况下,对于像这样的简单内容,您可以使用(zipmap symList valList)
来获取地图。
答案 1 :(得分:0)
(let [valList (map str symList)]
(somefun valList))
你得到的错误是因为你的let语句是倒退的(让[val SOURCE] STUFF)
答案 2 :(得分:0)
也许matchure可以为您提供您想要的东西
答案 3 :(得分:0)
虽然我一直无法找到动态解构列表的方法,但对于那些有兴趣创建词法而不是动态范围的值的人,我发现intern
到你需要的任何命名空间效果很好。