Я изучаю clojure и озадачен.
Что заполняет пробел, чтобы сделать следующее выражение eval равным true?
(= "foo" ___ (str (seq "foo")))
Ответ 1
Вам нужно использовать функцию применить:
user=> (apply str (seq "foo"))
"foo"
Ответ 2
На самом деле ничто не может заполнить пробел, чтобы сделать выражение (= "foo" _ (str (seq "foo" ))) eval для true, потому что (str (seq "foo" )) = > "(\ f\o\o)", который не равен "foo", поэтому мы уже имеем неравенство, а третий элемент, независимо от того, какое значение, заполнить пробел, не может заставить выражение оценить true
Если вы хотели спросить
(= "foo"
(____ str (seq "foo")))
Тогда ответ будет справедливо применяться, как ответил alex.
user> (doc apply)
-------------------------
clojure.core/apply
([f args* argseq])
Applies fn f to the argument list formed by prepending args to argseq.
Применяет функцию (в этом случае str) и вызывает str с аргументами, присутствующими в seq
Будет напечатан "foo". Вы могли бы определить свой собственный join, используя ранее упомянутый метод (чтобы избежать записи (apply str seq) все время).