Size: a a a

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

2021 March 13

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Sergey Trofimov
Зато идет про лишние вычисления
Ну смари.
Я к чему?
Было утверждение, что из-за макросовой природы and иногда возникают неудобства.
Я попытался вспомнить, когда у меня возникали такие неудобства и на ум пришло только это: не компилится (reduce and s). Помнится, что пришлось побороть так:
(reduce #(and %1 %2) s)
И тогда я вообще не думал ни о КЗ, ни о лишних вычислениях. Мне в той ситуации было не принципиально. Вероятно, что я тогда и про вариант (every? identity s) не знал.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Damir Farazetdinov
нет. Это (reduce and s), но компилится.
Так не надо делать, потому и не компилится. Для этого есть every?
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Ну да. Скорее всего не знал.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Damir Farazetdinov
Мне на ум приходит только случай с (reduce and s), который решается просто через #(and %1 %2)
Reduced нужен в рабочем варианте для КЗ
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Кароче, проблема все равно есть. Незя and передать как параметр в другую функу. Но как-то проблема обходится.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Sergey Trofimov
Reduced нужен в рабочем варианте для КЗ
Да. Но хрен с ним.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Один нюанс:
(and :not-nil) ;; => :not-nil
(and nil) ;; => nil
every? returns true or false.
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Vladimir Pavlyuk
но я бы запилил конечно еще и как функции их
с макросами часто неудобно
тот же apply сделать сложно
every-pred и some-fn придут вам на помощь в этом случае
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Ну и всегда можно обойтись анонимной функой #(and %1 %2) и для or аналогично
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
(apply and coll) это (every? true? coll), для or аналогично с some
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
(apply and coll) это (every? true? coll), для or аналогично с some
Можно еще как (some identity coll) тогда вообще результат будет идентичен тому, что ожидается от (apply or coll)
источник

А(

Артур (MIIIG) in Clojure — русскоговорящее сообщество
опыт не пропить)
источник

M

Maxim in Clojure — русскоговорящее сообщество
Артур (MIIIG)
опыт не пропить)
Какая хорошая картинка...
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Артур (MIIIG)
опыт не пропить)
Есть в этом что-то. В тестах особенно подход справа удобнее
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Иногда он все равно становится больше по кол-ву строк из-за множества разных кейсов, но читается мгновенно и это важно
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Артур (MIIIG)
опыт не пропить)
В левом варианте ошибка
источник

D

Dos in Clojure — русскоговорящее сообщество
Артур (MIIIG)
опыт не пропить)
О вспомнил, как то раз на собесе я точно также написал как справа. Интервьюер не оценил)))
источник

M

Maxim in Clojure — русскоговорящее сообщество
Dos
О вспомнил, как то раз на собесе я точно также написал как справа. Интервьюер не оценил)))
Не взяли? Да и к лучшему.
источник

M

Maxim in Clojure — русскоговорящее сообщество
Damir Farazetdinov
В левом варианте ошибка
Он вообще не работает
источник

M

Maxim in Clojure — русскоговорящее сообщество
cat test.cpp
#include <stdio.h>

int main() {
 int i, j;

 for (i = 0; i <= 4; i++) {
   for (j = 0; j <= 1; j++) {
     printf(" * ");
   }

   printf("\n");
 }
}
gcc test.cpp
./a.out
*  *
*  *
*  *
*  *
*  *
источник