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