Size: a a a

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

2021 July 22

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
🤔🤔🤔🤔 хммм, выглядит круто! пошел читать как работает some
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
в чём код пишешь?
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
в emacs'e
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
C-c C-d C-d runs the command cider-doc
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ещё можно реализовать на мультиметодах, но я их недолюбливаю и без лишней необходимости стараюсь не использовать
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Благодарю!! 😌
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
макрос будет необходим только в том случае, если зачем-то надо сгенерировать код из данных, но пока я не вижу, зачем
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Да в общем-то генерить я его хотел потому-что у меня на входе будет несколько т.н. стейтов. Подобных тому что я описал.

Идея была в том, что из них сделать обычные функции с case/cond внутри.

Удобным это казалось потому-что стейты один другой сменяют, казалось что это могут быть просто вызовы функций.

Скажем было:
"scanright": [
{ "read" : ".", "to_state": "scanright", "write": ".", "action": "RIGHT"},
{ "read" : "1", "to_state": "scanright", "write": "1", "action": "RIGHT"},

],
"eraseone": [
{ "read" : "1", "to_state": "subone", "write": "=", "action": "LEFT"},
{ "read" : "-", "to_state": "HALT" , "write": ".", "action": "LEFT"}
],

A стало

(scanright [something]
  (case symbol
        . (dosomething)
        1 (eraseone)))

(eraseone [something]
  (case symbol
        1 (dosomething)
        - (scanright)))
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Почему-то логичным показалось сначало сгенерировать функции из описания. И пусть друг друга зовут
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
(Сори за форматтинг, пока еще не понял как красивее/удобнее код показывать)
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
смысла в генерации функций я не вижу
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
если есть желание сделать input динамическим на время разработки - просто сделай input функцией
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
(some (fn [{:keys [cond action]}]
           (when cond
             (action)))
         (input))
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ну и с some профит от case очень сомнительный
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
по поводу функций, которые зовут друг друга - тем же some-ом находишь нужный экшн и вызываешь
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Да, вот именно это в голове как раз. Спасибо, значит правильная мысль пришла!
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Благодарю еще раз. Так как-то даже элегантнее получается
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ну и там параллельно можно диспатчить через деструктуризацию не только по cond, но и по всему остальному
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ещё некоторые делают FSM на паттерн-матчинге (core.match, например)
источник

LL

Lämppi Lütti in Clojure — русскоговорящее сообщество
Никак
источник