Как идиоматический c способ гарантировать, что какое-то неизвестное значение находится внутри последовательности? - PullRequest
0 голосов
/ 20 января 2020

Какой идиоматический c способ гарантировать, что какое-то неизвестное значение находится внутри последовательности, где это значение может или не может быть уже в последовательности? (into [] val) терпит неудачу, если val не в seq (conj [] val) всегда работает, но может быть вложенным, то есть [[val...]] (о, и не быть вложенным, если уже в seq) * это просто (flatten (conj?

Ответы [ 2 ]

6 голосов
/ 21 января 2020

Подобные вещи - работа со значением, которое может или не может быть последовательностью, - просто не идиоматизм c. См. https://stuartsierra.com/2015/06/10/clojure-donts-heisenparameter, где он специально это вызывает.

Измените код, чтобы val всегда был последовательностью или никогда не последовательностью. Вы никогда не должны иметь код, который может производить оба.

0 голосов
/ 20 января 2020

(conj [] val) всегда будет возвращать [val], никогда [[val]].

Если val сам по себе является вектором, то да, (conj [] val) вернет вектор одного элемента, где этот элемент - это вектор val.

...