Странное поведение функции interpose в Clojure - PullRequest
0 голосов
/ 31 марта 2020

Я манипулировал некоторыми данными и использовал вставку в конце. Но он действовал по-другому, когда дело дошло до некоторых букв, таких как , `~

Ожидаемое поведение

(interpose '! ["a" "b" "c"])
=> ("a" ! "b" ! "c")

(interpose 'k ["a" "b" "c"])
=> ("a" k "b" k "c")

(interpose '- ["a" "b" "c"])
=> ("a" - "b" - "c")

Не ожидаемое поведение ( Они возвращают функцию вместо результата данных)

(interpose ', ["a" "b" "c"])
=> #object[clojure.core$interpose$fn__6471 0x6f0c27f3 "clojure.core$interpose$fn__6471@6f0c27f3"]
(interpose '` ["a" "b" "c"])

=> #object[clojure.core$interpose$fn__6471 0x7b94fbcb "clojure.core$interpose$fn__6471@7b94fbcb"]
(interpose '~ ["a" "b" "c"])

=> #object[clojure.core$interpose$fn__6471 0x36966945 "clojure.core$interpose$fn__6471@36966945"]

1 Ответ

5 голосов
/ 31 марта 2020

Все эти символы имеют особое значение в Clojure, и вы просто не можете ввести их только с цитатой. Таким образом, они обрабатываются с их значением читателем, а затем ваша цитата ' используется для следующей формы. Все это приведет к коду, который вызывает одно-арную версию interpose, которая затем даст вам преобразователь, что приведет к получению функций, которые вы увидите как результаты.

Если вы хотите, чтобы эти символы были символы, вы можете использовать symbol. Например,

user=> (interpose (symbol ",") ["a" "b" "c"])
("a" , "b" , "c")

Значения этих символов:

Результирующий код с неожиданным поведением выглядит в основном так:

user=> `(interpose ', ["a" "b" "c"])
(clojure.core/interpose (quote ["a" "b" "c"]))
user=> `(interpose '` ["a" "b" "c"])
(clojure.core/interpose (quote (clojure.core/apply clojure.core/vector (clojure.core/seq (clojure.core/concat (clojure.core/list "a") (clojure.core/list "b") (clojure.core/list "c"))))))
user=> `(interpose '~ ["a" "b" "c"])
(clojure.core/interpose (quote ["a" "b" "c"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...