gpt4 book ai didi

clojure - 这种形式构造有什么问题?

转载 作者:行者123 更新时间:2023-12-01 07:28:23 26 4
gpt4 key购买 nike

考虑到有效的 clojure 形式:

    > (let [a 16 b 8] (/ a b))
2

我正在尝试手工构建它以便将它放入 eval称呼。我之前就被 repl 拒绝了:
> (list 'let '[ 'a '16 'b '8 '] '(/ a b) )
RuntimeException Unmatched delimiter: ] clojure.lang.Util.runtimeException (Util.java:156)
(/ a b)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:156)

引用数组字符 []是不足够的。实际上,以下表达式(删除 [ 和 ])是可以的:
> (list 'let  'a '16 'b '8  '(/ a b) )
(let a 16 b 8 (/ a b))

这种结构有什么问题?我该如何解决这个问题?是否有任何特殊形式来引用 [ 和 ] 字符?

最佳答案

如果您正在尝试生成代码,那么我建议使用 auto-gensyms 构建此表达式,如下所示:

`(let [a# 16 b# 8] (/ a# b#))

自动生成符号( a#b# )创建保证唯一的符号名称。这不是绝对必要的,但在更复杂的情况下,它可以帮助避免意外捕获变量名称(例如,通过不同级别的宏扩展)。

请注意在表达式开头使用语法引号 (`) 而不是正则引号 (')。当您生成代码时,这通常比常规引号更好,因为它会自动处理 namespace 。

关于clojure - 这种形式构造有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12450646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com