Size: a a a

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

2020 March 06

AV

Abyr Valg in Clojure — русскоговорящее сообщество
Слушайте
источник

AV

Abyr Valg in Clojure — русскоговорящее сообщество
Как в кложе ио-монаду сделать?
источник

A

Artem in Clojure — русскоговорящее сообщество
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Abyr Valg
Как в кложе ио-монаду сделать?
Смотря зачем тебе это нужно.
Если помечать функции как грязные через систему типов, то в кложе нет статической типизации.
Если сделать "чистые функции" работающие с побочными эфеектами, то я могу рассказать как сделать алгебраические эффекты.
источник

AV

Abyr Valg in Clojure — русскоговорящее сообщество
как сделать алгебраические эффекты тогда?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Abyr Valg
как сделать алгебраические эффекты тогда?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
источник

AV

Abyr Valg in Clojure — русскоговорящее сообщество
Жестко. В таком стиле кто-то пишет?..
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Tim Plotnikov
А есть у partial application какое-нибудь влияние на перф?
ну есть такой момент, что если ты заворачиваешь что-то, что работает лучше с type hints, то partial тебе всё это счастливо скроет и никаких reflection warning не скажет
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Слушайте. Как натянуть сову на глобус? ..... Жестко. Так кто-нибудь натягивает?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Abyr Valg
Жестко. В таком стиле кто-то пишет?..
Ну почему жестко? Зато можно делать тесты через сценарии.
В проде я это не использую, это пока исследовательский проект.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну есть такой момент, что если ты заворачиваешь что-то, что работает лучше с type hints, то partial тебе всё это счастливо скроет и никаких reflection warning не скажет
то есть окажется, что (partial +) даст менее производительный вариант, чем #(+ ^int %1 ^int %2)
источник

T

Timmy B in Clojure — русскоговорящее сообщество
Mikhail Borisov
Котлин:
capacity.zip(load).any { (c,l) -> c < l }
“правильная" котлин-версия со всеми типами выглядит отак

val fleet = problem.fleet
val tours = solution.tours.orEmpty()

val tourVehicles = tours.map { t -> fleet.types.find { vt -> vt.id == t.typeId } }

val violatingTours = tours.zip(tourVehicles)
   .filter { (tour, vehicleType) ->
       vehicleType == null || tour.stops.any { s ->
           s.load.zip(vehicleType.capacity).any { (l, c) -> l > c }
       }
   }
источник

T

Timmy B in Clojure — русскоговорящее сообщество
аналогичная кложа

(defn vehicle-by-type [fleet type-name]
 (m/find fleet
   {:types
    (m/scan {:id ~type-name :as ?vechicle})}

    ?vechicle))

(defn capacity-not-exceded? [vechicle stop]
 (let [load (:load stop)
       capacity (:capacity vechicle)]

   (some true? (map < capacity load))))

(defn find-capacity-violation [tour fleet]
 (let [type-name (:typeId tour)
       vechicle-type (vehicle-by-type fleet type-name)
       stops (:stops tour)]
   (filter (partial capacity-not-exceded? vechicle-type) stops)))


(defn validate-maximal-capacity [problem solution]
 (let [fleet (:fleet problem)
       tours (:tours solution)]
   (->> tours
        (map #(find-capacity-violation % fleet))
        (remove empty?)
        )))
источник

НМ

Наташа Маркс in Clojure — русскоговорящее сообщество
А что такое монада ? Что за мем?
источник

T

Timmy B in Clojure — русскоговорящее сообщество
но тут конечно есть разница, всё порезано на функции-шмункции, а в сампле котлиновского кода нет всех 50 датаклассов
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
 
(->> tours
        (map #(find-capacity-violation % fleet))
        (remove empty?))

после одной дискуссии я с первого взгляда вижу места для keep 😁
источник

NK

Nikita Kononenko in Clojure — русскоговорящее сообщество
Наташа Маркс
А что такое монада ? Что за мем?
Монада - это просто моноид в категории эндофункторов
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
только нил должна возвращать функция )
источник

T

Timmy B in Clojure — русскоговорящее сообщество
Andrey Ivanov
 
(->> tours
        (map #(find-capacity-violation % fleet))
        (remove empty?))

после одной дискуссии я с первого взгляда вижу места для keep 😁
TIL, спасибо
источник