Clojure:是否可以返回不带圆括号的函数参数


(defn foo                       ;Assume the user types: (foo '(John))
[input]
(cond
(some #{'John}? input) RETURN JOHN HERE, NOT (JOHN)
)

我只是想返回John的输入。但是,如果我在第二个语句之后输入,则会返回带括号的John。我怎么能只回约翰。我意识到返回false、true之类的东西是可能的,但Clojure不喜欢返回其他东西。

如果input是一个符号序列,则(some #{'John} input)将单独返回John,而不是(John):

user=> (some #{'John} '(Sam Dave John Fred))
John

也许你不需要把它封装在cond中?

如果您只想获取传递列表的第一项,那么您可以使用first函数,例如(first input)

例如:

user=> (def input '(John))
#'user/input
user=> input
(John)
user=> (def output (first input))
#'user/output
user=> output
John

仔细检查一下你是否需要这种形式的输入,如果有一种方法可以使用字符串而不是符号,那么很多都会变得更简单。

最新更新