Clojure: возможно ли вернуть параметр функции без скобок? - PullRequest
0 голосов
/ 10 марта 2020
(defn foo                       ;Assume the user types: (foo '(John))

 [input]

 (cond
(some #{'John}? input) RETURN JOHN HERE, NOT (JOHN)
)

Я просто хочу вернуть ввод, который является Джоном. Но John с круглыми скобками возвращается, если я делаю (input) после оператора cond. Как я могу вернуть только Джона. Я понимаю, что возможно вернуть такие вещи, как ложь, правда, но Clojure не любит возвращать другие вещи.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Если ваш input является последовательностью символов, (some #{'John} input) вернет John сам по себе, а не (John):

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

Возможно, вам просто не нужно оборачивать это в cond?

0 голосов
/ 10 марта 2020

Если все, что вам нужно, это взять первый элемент переданного списка, то вы можете использовать функцию first, например, (first input).

Например:

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

Дважды проверьте, что вам нужен ввод в этой форме, хотя, если есть способ использовать строки вместо символов, многое становится проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...