Size: a a a

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

2020 March 06

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Artem
@strofimov1972 подскажешь чем ты замеряешь время выполнения кода? это ж не time из стандартной библиотеки?
ссылку не надо?
источник

A

Artem in Clojure — русскоговорящее сообщество
не не над, спасиб)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Artem
@strofimov1972 подскажешь чем ты замеряешь время выполнения кода? это ж не time из стандартной библиотеки?
time это на один раз
а критериум гоняет
источник

НМ

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

НМ

Наташа Маркс in Clojure — русскоговорящее сообщество
Есть два регистра
R1 и R2
Есть две команды
C1: R1 := K*R2 - R1
C2: R2 := K*R1 + R2
Есть целевое число N
На входе: K, N, R1, R2
Нужно: распечатать минимальную последовательность из команд, позволяющую получить N в R1 или в R2 (в любом из двух регистров)
Либо напечатать ничего
Известно, что K != 0, R1 != R2, K, R1, R2 - натуральные, N - целое.
источник

НМ

Наташа Маркс in Clojure — русскоговорящее сообщество
Уже день голову ломаю
источник
2020 March 07

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
t k n r1 r2 = go [([], r1, r2)] where
 go l | null rs = go $ l >>= f
      | otherwise = rs where
   rs = filter (\(cs, r1, r2) -> r1 == n || r2 == n) l
 f (cs, r1, r2) = [("c1":cs, k*r2 - r1, r2), ("c2":cs, r1, k*r1 + r2)]

main = print $ t 1 100 1 5

ЗЫ отсечения чтобы не улетала в ненужные большие числа сам(а)(о) добавишь
ЗЗЫ факт, что из линейной комбинации четных чисел нечетное не получить сам(а)(о) докажежь. Равно как и условия существования решения - взаимная простота и все такое
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
ЗЫ к слову, в коте выше вовсю используется одна из монад, о которых тут так жарко спорили еще до срача с Олеговцами
источник

НМ

Наташа Маркс in Clojure — русскоговорящее сообщество
Andrey Ivanov
t k n r1 r2 = go [([], r1, r2)] where
 go l | null rs = go $ l >>= f
      | otherwise = rs where
   rs = filter (\(cs, r1, r2) -> r1 == n || r2 == n) l
 f (cs, r1, r2) = [("c1":cs, k*r2 - r1, r2), ("c2":cs, r1, k*r1 + r2)]

main = print $ t 1 100 1 5

ЗЫ отсечения чтобы не улетала в ненужные большие числа сам(а)(о) добавишь
ЗЗЫ факт, что из линейной комбинации четных чисел нечетное не получить сам(а)(о) докажежь. Равно как и условия существования решения - взаимная простота и все такое
У тебя не минимальная последовательность
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
пример или не было
источник

E

ETL in Clojure — русскоговорящее сообщество
Andrey Ivanov
t k n r1 r2 = go [([], r1, r2)] where
 go l | null rs = go $ l >>= f
      | otherwise = rs where
   rs = filter (\(cs, r1, r2) -> r1 == n || r2 == n) l
 f (cs, r1, r2) = [("c1":cs, k*r2 - r1, r2), ("c2":cs, r1, k*r1 + r2)]

main = print $ t 1 100 1 5

ЗЫ отсечения чтобы не улетала в ненужные большие числа сам(а)(о) добавишь
ЗЗЫ факт, что из линейной комбинации четных чисел нечетное не получить сам(а)(о) докажежь. Равно как и условия существования решения - взаимная простота и все такое
go :: IORef WNState -> Direction2D -> X ()
go = withTargetWindow W.focusWindow

А можно на пальцах объяснить,
что делает функция go ?
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
что напишут, то и делает. ваши страшные типы к моей гошечке не имеют никакого отношения
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
а по существу, в моем коте функция го реализует обход графа преобразований в ширину, логично используя для этого Лист-монаду
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
(по секрету, в Кложе это был бы обычный mapcat, но с теми же самыми словами про монадский бинт, хотя в Кложе их не принято говорить и даже думать)
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
но это уже к вопросу - нужны ли в Кложе монады. как таковые может и не нужны, но видеть их в алгоритмах бывает полезно, а Хаскель единственный язык, который учит этому явно
источник

E

ETL in Clojure — русскоговорящее сообщество
Andrey Ivanov
но это уже к вопросу - нужны ли в Кложе монады. как таковые может и не нужны, но видеть их в алгоритмах бывает полезно, а Хаскель единственный язык, который учит этому явно
Ну и какбэ в Haskell нет запрета написать concat (map f l). Мне кажется монады в Haskell есть в чистом виде производная от используемой системы типов фича, я в Clojure ни разу не задумывался пока о монадах)))
источник

E

ETL in Clojure — русскоговорящее сообщество
Фраза transducers are not monads вводит в некоторый трепет, но надеюсь доживу и до открытия этой тайны)))
источник

Д

Диёр in Clojure — русскоговорящее сообщество
(.query client "select 1" #())
Execution error (IllegalArgumentException) at example.core/eval1687 (form-init10189429449269999947.clj:1).
No matching method query found taking 2 args for class io.vertx.pgclient.impl.PgPoolImpl

чего он от меня хочет?
вот этот метод пытаюсь вызвать:
PgPool query(String var1, Handler<AsyncResult<RowSet<Row>>> var2);
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Запрета конечно нет. Просто мышление в монадах, аппликативах, моноидах, и т.п. дает другой уровень понимания алгоритмов как таковых. А так конечно можно как в анектдоте - вы что, Баха исполняете? - да так, хреначим что на нотном листе помаленьку
источник

Д

Диёр in Clojure — русскоговорящее сообщество
Диёр
(.query client "select 1" #())
Execution error (IllegalArgumentException) at example.core/eval1687 (form-init10189429449269999947.clj:1).
No matching method query found taking 2 args for class io.vertx.pgclient.impl.PgPoolImpl

чего он от меня хочет?
вот этот метод пытаюсь вызвать:
PgPool query(String var1, Handler<AsyncResult<RowSet<Row>>> var2);
нашёл что этот Handler из query представляет, через reify реализовал, работает
источник