Size: a a a

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

2020 March 08

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
то есть я тоже люблю выносить в отдельные функции, но мне кажется, что читаемость алгоритма из кода — снижается
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
то есть я тоже люблю выносить в отдельные функции, но мне кажется, что читаемость алгоритма из кода — снижается
плюс на верхнем  уровне появляются функции, не имеющие самостоятельного значения
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
а ещё можно ffn заменить
в общем случае условие срабатывания может быть произвольным, поэтому, наверное, не стоит
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Sergey Trofimov
в общем случае условие срабатывания может быть произвольным, поэтому, наверное, не стоит
да, пожалуй тут ты прав
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
тут ещё и задача (имхо) какая-то абстрактная
источник

ST

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

(defn task-operations
 [K]
 {:C1 (fn [[r1 r2 :as rs]] (assoc rs 0 (- (* K r2) r1)))
  :C2 (fn [[r1 r2 :as rs]] (assoc rs 1 (+ (* K r1) r2)))})

(defn goal-reached?
 [N [r1 r2]]
 (or (= N r1) (= N r2)))

(defn solve2 [operations goal? init]
 (let [step (fn [[cs rs]] (for [[c f] operations]
                            [(conj cs c) (f rs)]))
       run (fn [states] (or
                          (not-empty (filter (comp goal? second) states))
                          (recur (mapcat step states))))]
   (run [[[] init]])))

(solve2 (task-operations 1) (partial goal-reached? 100) [1 5])
=>
([[:C1 :C2 :C1 :C2 :C2 :C2 :C1 :C2 :C2 :C2 :C2] [19 100]]
[[:C2 :C1 :C2 :C2 :C2 :C1 :C2 :C1 :C2 :C2 :C2] [21 100]])
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
По поводу того, что можно вынести: у себя в Лискрипте я вообще абстрагировал поиск в глубину и поиск в ширину - принимают стартовое состояние, функцию получения списка новых состояний из переданного и критерий финального состояния. Остальное обобщается. Решает все на свете от Судоку до всяких переправ через реки и т.п.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Andrey Ivanov
По поводу того, что можно вынести: у себя в Лискрипте я вообще абстрагировал поиск в глубину и поиск в ширину - принимают стартовое состояние, функцию получения списка новых состояний из переданного и критерий финального состояния. Остальное обобщается. Решает все на свете от Судоку до всяких переправ через реки и т.п.
хорошо, почитаем 😉
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Andrey Ivanov
По поводу того, что можно вынести: у себя в Лискрипте я вообще абстрагировал поиск в глубину и поиск в ширину - принимают стартовое состояние, функцию получения списка новых состояний из переданного и критерий финального состояния. Остальное обобщается. Решает все на свете от Судоку до всяких переправ через реки и т.п.
Clojure-то выучил? 😂
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Нет конечно. Да и не вижу смысла выучивать наизусть то, что можно посмортеть в кложадоксе
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Но сейчас знаю больше чем когда писал эту фразу ))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
то есть для тебя что-то выучить означает выучить это наизусть?
наверное, только лискрипт и знаешь наизусть?
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Нет, просто сначала не понял источник твоей шутки ) И решил поерничать на тему понятия "выучил" применительно к языку или технологии )
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Кстати, наверное эти абстракции я явно не выносил в стдлибу, только в примерах можно глянуть, типа здесь (там и (concat (map ...)) и левая свертка и все такое )  https://github.com/Ivana-/Liscript-GUI-Java-Swing/blob/master/demo/03_demo_examples.liscript#L296
источник

AI

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

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
выравнивание кода руками?
или выравниватель обучен, в каких формах как отступы расставлять?
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
А вот не помню ))) Автоотступ вложенных форм с новой строки вроде работает с любыми скобочными формами, а выравнивание по условиям cond и прочим конечно не работает, там руками. Я первые примеры кода вообще в виндовом нотпаде писал, но быстро устал от отсуттствия подсветки парных скобок поставил себе Идею (!) 😂
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
меня этот вопрос с отступами, как тот гондурас, беспокоит
использую «Default to Only Indent», но это как бы в разрез с лисповыми традициями
а по лисповым традициям сделать — уже я сам начинаю страдать, если приходится редактор формам-исключениям обучать...
источник

ST

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

AI

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