clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
akond 2018-02-27T07:59:10.000203Z

может core.logic ?

dottedmag 2018-02-27T08:00:10.000186Z

А как он поможет? Я посмотрел, но не понял.

akond 2018-02-27T08:00:50.000041Z

да, там надо сначала понять их логику. надо смотреть видео с объяснением. я с набегу тоже ничего не понял.

akond 2018-02-27T08:02:01.000217Z

у них реляционное программирование. хотя именно под твои примеры оно не совсем подходит из коробки. надо будет дописывать свои реляции, видимо.

kirill.salykin 2018-02-27T08:02:51.000097Z

core.logic так же юзает юнификацию

dottedmag 2018-02-27T08:03:13.000214Z

В том и дело, что надо много своего писать, так что я искал готовую штуку для переписывания термов.

kirill.salykin 2018-02-27T08:03:48.000088Z

может быть вот такое как-то поможет

kirill.salykin 2018-02-27T08:03:48.000220Z

http://www.clara-rules.org/

akond 2018-02-27T08:04:30.000117Z

клара немного не про это

dottedmag 2018-02-27T08:04:32.000334Z

Я уже смотрю akar

dottedmag 2018-02-27T08:05:29.000232Z

Можно, конечно, и вручную, сверху вниз дерево обойти и руками наматчить.

dottedmag 2018-02-27T08:05:33.000268Z

Но код будет нечитабельный.

akond 2018-02-27T08:20:13.000017Z

смотрю акар не менее путанный, чем core.logic

dottedmag 2018-02-27T09:40:13.000343Z

С core.logic непонятно, что писать. А в akar непонятно, как писать 🙂

akond 2018-02-27T11:27:50.000445Z

чтобы писать на core.logic надо поменять сознание

akond 2018-02-27T11:30:13.000433Z

сейчас это делать не обязательно, но если будет интересно, то смотри на ютубе Relational Programming in miniKanren by William Byrd

akond 2018-02-27T11:42:59.000034Z

наверное для твоей задачи это будет без нужды сложно

ažyliuk 2018-02-27T12:07:20.000167Z

Есть хорошие туториалы по кор-лоджику где-то на гитхабе. Там можно за пару часов въехать как им пользоваться

ažyliuk 2018-02-27T12:07:30.000193Z

с примерами

ažyliuk 2018-02-27T12:07:55.000195Z

Тем более что есть реальная задача, я то его просто для расширения кругозора изучал

dottedmag 2018-02-27T12:08:14.000198Z

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

ažyliuk 2018-02-27T12:11:02.000203Z

Ну вроде бы как подходит под задачу. Но походу действительно надо просто унифицировать. но core.unify я не использовал, так что не могу тут подсказать) Если найдешь решение то напиши, интересно как ты это сделаешь

dottedmag 2018-02-27T12:26:38.000156Z

Да, можно и сделать, чтобы с core.logic поиграться.

dottedmag 2018-02-27T12:26:46.000347Z

А то я The Reasoned Schemer слишком давно читал.

dottedmag 2018-02-27T18:19:56.000245Z

Оно всё растёт ногами из Пролога.

dottedmag 2018-02-27T18:20:01.000077Z

А надо из РЕФАЛа, а нету.

dottedmag 2018-02-27T18:22:49.000020Z

Вот, нашёл: https://github.com/mschuene/stratege

nicola 2018-02-27T19:56:03.000006Z

> core.logic is just a freaky DSL for doing exhaustive search

misha 2018-02-27T19:56:20.000051Z

@dottedmag а расскажи в двух словах что за юзкейс такой интересный: для чего такое аст, и почему понадобилось именно так переписать

misha 2018-02-27T19:56:45.000169Z

а то либы какие-то изотерические все

nicola 2018-02-27T19:58:03.000425Z

есть книжка - https://mitpress.mit.edu/books/reasoned-schemer

misha 2018-02-27T19:59:19.000391Z

они своеобразно написаны, на них ок диплернинг алгоритмы учить :kappa:

dottedmag 2018-02-27T19:59:31.000044Z

@misha Да просто есть выплюнутое из C++-кода страшное дерево, я хочу его причесать, чтобы понять, что там вообще.

dottedmag 2018-02-27T19:59:50.000456Z

Дерево — AST разбора языка http://nixos.org

dottedmag 2018-02-27T20:00:08.000780Z

Там ленивый функциональный язык но с дичайшим синтаксисом, глаза сломать можно.

misha 2018-02-27T20:00:33.000689Z

Балдридж делал на конже доклад как они тулзы для кложурного аст писали, может идеи подаст тебе какие-то

dottedmag 2018-02-27T20:00:58.000037Z

Например, (get-in {...} [:a :b] def) записывается как... {...}.a.b or def

misha 2018-02-27T20:01:12.000756Z

instaparse

misha 2018-02-27T20:01:30.000557Z

хотя не, если уже аст есть, то спека, к @roman01la +1

dottedmag 2018-02-27T20:01:41.000813Z

А парсер мне не нужен, я из этого языка полностью разобранную форму уже достал и в виде кложурных термов выплюнул.

nicola 2018-02-27T20:01:48.000655Z

а что ты в этом дереве будешь искать?

misha 2018-02-27T20:02:00.000219Z

но потом прийдется ходить по конформнутому спековскому дереву :opieop:

nicola 2018-02-27T20:02:26.000341Z

напиши интерпретатор его 🙂

dottedmag 2018-02-27T20:02:32.000214Z

Я его буду читать. У меня вообще желание сделать 2-way биндинг, чтобы 1) писать для NixOS конфигурацию на кложуре и транслировать в этот недоязычок, 2) читать их поделия без вытекания глаз.

dottedmag 2018-02-27T20:03:32.000724Z

Там, например, ; вполне может встретиться в середине конструкции. Синтаксис такой.

misha 2018-02-27T20:03:33.000748Z

ну если двустороннюю, спекой можно будет забесплатно раундтрип конформ/анформ заполучить

misha 2018-02-27T20:04:23.000687Z

а у тебя рукописный пример есть инпута-аутпута?

misha 2018-02-27T20:04:46.000071Z

покрупнее чем https://clojurians.slack.com/archives/C050HE28Y/p1519562415000033

nicola 2018-02-27T20:05:01.000243Z

на триплы и в датомик

misha 2018-02-27T20:05:15.000647Z

ты предполагаешь, что там только триплы

nicola 2018-02-27T20:05:43.000317Z

а триплами любую структуру можно выразить

misha 2018-02-27T20:05:56.000612Z

:troll:

nicola 2018-02-27T20:05:58.000623Z

ну и даталогом попробовать ударить

misha 2018-02-27T20:06:24.000688Z

я б наверное мультиметодами, или спекой

dottedmag 2018-02-27T20:06:32.000399Z

@nicola Мне такой мощный вариант не нужен.

dottedmag 2018-02-27T20:06:42.000138Z

Скорее, можно взять unify из core.logic и простой обход дерева.

dottedmag 2018-02-27T20:06:51.000320Z

Так, а чем бы по pretty-print'ить целый файл *.clj?

misha 2018-02-27T20:06:59.000523Z

есть ссылка на грамматику синтаксиса?

dottedmag 2018-02-27T20:07:06.000013Z

А то выхлоп да ещё и без индентации ужс.

misha 2018-02-27T20:07:32.000185Z

(-> % slurp clojure.pprint/pprint)

misha 2018-02-27T20:07:34.000023Z

:D

dottedmag 2018-02-27T20:07:38.000068Z

да, действительно

misha 2018-02-27T20:09:04.000382Z

Recursive sets are just normal sets, but the attributes can refer to each other. For example,

misha 2018-02-27T20:09:12.000485Z

удачи, кароче

dottedmag 2018-02-27T20:10:02.000042Z

https://pastebin.com/71EUecXP

dottedmag 2018-02-27T20:10:42.000669Z

Да, то, что у них называется set — это на самом деле map.

nicola 2018-02-27T20:10:53.000483Z

eval всеже напрашивается 🙂

dottedmag 2018-02-27T20:11:16.000615Z

Так мне не эвалить, а читать.

dottedmag 2018-02-27T20:11:28.000413Z

Поэтому я хочу свернуть в кложурные конструкции.

dottedmag 2018-02-27T20:11:35.000720Z

Эвалюатор этой штуки уже есть.

misha 2018-02-27T20:11:44.000718Z

тк это не edn, поначалу надо текст попарсить, для этого - интсапарс

dottedmag 2018-02-27T20:12:03.000623Z

@misha А зачем? У меня уже есть AST в виде кложурного дерева.

misha 2018-02-27T20:12:11.000118Z

а

misha 2018-02-27T20:12:18.000049Z

ну тогда спекой его

misha 2018-02-27T20:12:40.000655Z

так а ты пастнул не дерево же, да?

dottedmag 2018-02-27T20:12:45.000164Z

Дерево.

nicola 2018-02-27T20:13:14.000572Z

так эваль в кложурные структуры

misha 2018-02-27T20:13:19.000599Z

тогда поехали

dottedmag 2018-02-27T20:13:38.000604Z

@nicola А интересный вариант. Попробую.

dottedmag 2018-02-27T20:24:31.000095Z

Господа, а кто-нибудь видел библиотеку для работы с нереализованными графами? В таком графе по вершине я могу найти её соседей, но я не могу получить список всех вершин и рёбер, это computationally infeasible.

dottedmag 2018-02-27T20:26:00.000309Z

Я могу bfs, конечно, и руками написать, но было бы полезно взять готовую функцию обхода графа/поиска кратчайшего пути, и запихать туда реализацию нереализованного графа, через функции "получить начальные вершины", "найти соседей", "эта вершина — конечная?"

misha 2018-02-27T20:46:14.000184Z

@dottedmag

misha 2018-02-27T20:46:31.000071Z

а потом мультиметодом собрать в кложу

dottedmag 2018-02-27T20:46:44.000019Z

Да, это можно.

dottedmag 2018-02-27T20:47:01.000508Z

Только основная задача будет найти интересные паттерны и свернуть их в идиоматичные конструкции.

misha 2018-02-27T20:47:43.000150Z

у тебя всё унифицируется в туплы [:тип начинка], и по типу ты можешь мультиметод диспатчить

misha 2018-02-27T20:47:59.000459Z

у тебя их там штук 10 всего в копипасте