Я написал следующую функцию для определения, отличаются ли две строки точно на differing-char-no
позиции символов.
(defn differ-by
[id1 id2 differing-char-no]
(let [zipped-ids (map vector (seq id1) (seq id2))
differing-char-positions (filter #(not= %1 %2) zipped-ids)]
(= differing-char-no (count differing-char-positions))))
Функция, однако, выдает ArityException
при вызове.Исключением является вызов функции count
, который говорит Wrong number of args (1) passed to: ...
.
При отладке кода я заметил, что и differing-char-positions
, и zipped-ids
- это ленивые последовательности, которые не были реализованы.Тем не менее, оценка (count zipped-ids)
работает хорошо сразу, но (count differring-char-positions)
работает только после вызова (count zipped-ids)
один раз, то есть после того, как zipped-ids
был реализован.Может ли кто-нибудь объяснить это поведение?Почему эти ленивые последовательности ведут себя по-разному?