【发布时间】:2011-03-16 23:49:00
【问题描述】:
我有一个简单的 clojure 语法问题(因为我是该语言的新手)。对于这两个示例,我都有一个列表 lst (1 2 3 4):
在 Lisp 中我可以写:
=>`(列表中的第一个是 ,(first lst))
(列表中的第一个是 1)
在 Clojure 中,如果我写相同的东西(用语言翻译 , 到 ~ 就像我在某处读到的那样),我会得到:
=>'(列表的第一个是 ~(first lst))
(列表中的第一个是 (clojure.core/unquote (first lst)))
我希望我也可以在 Clojure 中做我想做的事,但我只是语法错误。我发现的所有示例都首先具有功能并使用`(反引号)。我不想调用这样的函数:
`(my-function ~(first lst))
我只想返回 '(其中替换为 ,(first lst) 的一些列表)
我可以在 Clojure 中做这样的事情吗?
编辑:我举了一个糟糕的例子,因为我的实际问题是处理字符串。让我再举一个例子……
=>(def color-lst '(红绿蓝))
我想返回的是:
=>`(我想要的颜色是~(first color-lst))
这产生了我看到的所有奇怪的回报。另一种方法是
=>(format "我想要的颜色是%s" (first color-lst))
这就是我解决问题的方法。
【问题讨论】:
-
虽然其他人已经帮助您解决了您的问题,但请注意这不是 Clojure 的方式。例如。 clojure 使用关键字而不是引用符号。如果您想要字符串(如您的示例中所示),请使用它们。所有'〜'的东西都很丑陋。而且你迟早会遇到一个难以发现的错误。
-
所有这些 ' ` 和 ~ 通常与宏一起使用。除非必要,否则尽可能避免它们。