> Скобки перестают напрягать и парить через несколько дней
Увы, это не так. Так и не перестали.
Всё остальное же есть и в Scala. Правда, надо отдать кложе должное, её автор - прагматик, и любит решать насущные проблемы, а не рассуждать теоретически. И ещё трудоголик.
(симуляция колонии муравьёв делается на скале несколькими разными способами и очень компактно, хотя дело не в этом - мы не каждый день пишем симуляторы колоний муравьёв).
Как-то практически не вижу фактов, сплошное "Кложа одновременно и правильная Джава", глупо как-то сидеть и выискивать два с половиной факта в длинном посте, который весь про впечатления.
1) type providers, хотя к Кложуре это не относится.
2) настройка синтаксиса под себя, создание DSL. Замыканиями тупо неудобно пользоваться.
То есть так рассуждать, то можно докатиться до «всё равно всё процессор исполняет, давайте писать тупо на ассемблере». И некоторые ведь пишут, что самое ужасное.
f . g = \x -> f (g x) -- Часть стандартной библиотеки
-- Наш код, data flow справа налево proc = filter (not null) . map g . JSON.parseJson . f
Стало (развернули):
infixr 9 → f → g = \x -> g (f x) -- Придумали сами такое
-- Переписали код, чтобы data flow шёл слева направо. proc = f → JSON.parseJson → map g → filter (not null)
Итого, простейшая функция меняет control flow. Почему это важно? Потому что показывает, что в твоём примере макрос не имеет большого смысла, достаточно просто функции. Даже не замыкания, а простейшей функции.
а биндинги к люсине не выкладывали? а то я собирался свои выложить, но как-то руки не дошли, чтобы довести их до "красивого" вида. хотя у меня оно для специфических целей используется...
Comments 469
Увы, это не так. Так и не перестали.
Всё остальное же есть и в Scala. Правда, надо отдать кложе должное, её автор - прагматик, и любит решать насущные проблемы, а не рассуждать теоретически. И ещё трудоголик.
(симуляция колонии муравьёв делается на скале несколькими разными способами и очень компактно, хотя дело не в этом - мы не каждый день пишем симуляторы колоний муравьёв).
Reply
Reply
Reply
Reply
Не очень понятен смысл этой фразы, если честно. Как-то она положительное впечатление обо всём посте сразу уничтожает.
Reply
Reply
Reply
Reply
Отложить вычисления можно через замыкания. Бывают какие-нибудь полезные применения макросов, не сводящиеся к замыканиям?
Reply
2) настройка синтаксиса под себя, создание DSL. Замыканиями тупо неудобно пользоваться.
То есть так рассуждать, то можно докатиться до «всё равно всё процессор исполняет, давайте писать тупо на ассемблере». И некоторые ведь пишут, что самое ужасное.
Reply
Плюс, я ж говорю - срезать углы. Есть разница между:
(->> (f x)
json/parse-json
(map #(g %))
(remove nil?))
и
(let [y (f x)
y1 (json/parse-json y)
y2 (map #(g %) y1)
y3 (remove nil? y2)]
y3)
Reply
Было:
f . g = \x -> f (g x) -- Часть стандартной библиотеки
-- Наш код, data flow справа налево
proc = filter (not null) . map g . JSON.parseJson . f
Стало (развернули):
infixr 9 →
f → g = \x -> g (f x) -- Придумали сами такое
-- Переписали код, чтобы data flow шёл слева направо.
proc = f → JSON.parseJson → map g → filter (not null)
Итого, простейшая функция меняет control flow. Почему это важно? Потому что показывает, что в твоём примере макрос не имеет большого смысла, достаточно просто функции. Даже не замыкания, а простейшей функции.
Reply
Reply
Reply
А фп, абстракции и все остальное это да. У нас на кложуре написан сервак аля elastic search (естессно тоже юзает люсину).
Reply
Reply
Reply
Reply
Reply
Reply
Leave a comment