Size: a a a

Clojure — русскоговорящее сообщество

2020 April 21

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
если нужен кучерявый компаратор, то и пиши кучерявый компаратор
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Ну, в порядке угара, есть вот такая жесть:
(sort-by (fn [x] [(if (nil? x) 0 1) x])
 [5 nil 1 3 0])

Сходу уронить это у меня не получилось.
порядок неправильный
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
А, по убыванию. Ну, идея решения понятна?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
А, по убыванию. Ну, идея решения понятна?
идея понятна
но человеку элегантности хочется
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Элегантность трудноопределимая штука 😐
Но да, если заклеить этот момент, получается как минимум заметно длиннее.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Элегантность трудноопределимая штука 😐
Но да, если заклеить этот момент, получается как минимум заметно длиннее.
получается как минимум не сразу понятно, как оно сортирует 😊
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я и предложил решение, которое сохраняет оригинальную функцию сортировки с адаптацией под nil ввод
на мой взгляд очень подходящий случай для fnil
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Ну такое. Я согласен с тем, что необходимость найти значение, большее чем все элементы в коллекции, это удар по универсальности решения.
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Впрочем, просилась элегантность, а не универсальность, так что... да.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Ну такое. Я согласен с тем, что необходимость найти значение, большее чем все элементы в коллекции, это удар по универсальности решения.
ну, это смотря что за функция сравнения
может она понимает кейворды :min и :max
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
то есть можно иметь навороченный компаратор, но который сам не решает, что делать с нулами.
а на вызывающей стороне сказать, на что надо заменять нулы, то есть null-first или null-last
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Ну, в порядке угара, есть вот такая жесть:
(sort-by (fn [x] [(if (nil? x) 0 1) x])
 [5 nil 1 3 0])

Сходу уронить это у меня не получилось.
уронить не получилось?
плохо старался 😊
  (sort-by (fn [x] [(if (nil? x) 0 1) x])
          ["5" nil 1 3 0])
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Sergey Trofimov
уронить не получилось?
плохо старался 😊
  (sort-by (fn [x] [(if (nil? x) 0 1) x])
          ["5" nil 1 3 0])
Строки в задачу не входили :P
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Строки в задачу не входили :P
ну, ты заговорил про универсальность, поэтому я не знаю, что сюда начало входить...
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Справедливо. Но если случай смешения nil'ов с числами мне ещё кажется реалистичным, то смешение nil'ов c числами и строками это уже явный косяк где-то до входа.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
(sort (fn [a b]
       (cond
         (nil? a) -1
         (nil? b) 1
         :else (compare b a)))
     [5 nil 1 3 0])

Как
-то элегантнее можно?
этот вариант с датами тоже не дружит 😊
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Sergey Trofimov
этот вариант с датами тоже не дружит 😊
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
У меня так даты работают
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Pavel Peganov
Справедливо. Но если случай смешения nil'ов с числами мне ещё кажется реалистичным, то смешение nil'ов c числами и строками это уже явный косяк где-то до входа.
ну у меня есть такой код, где это by design
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я подставлял (java.time.Instant/now) в твой код
источник