Fork me on GitHub
#clojure-russia
<
2018-02-27
>
akond07:02:10

может core.logic ?

dottedmag08:02:10

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

akond08:02:50

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

akond08:02:01

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

kirill.salykin08:02:51

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

dottedmag08:02:13

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

kirill.salykin08:02:48

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

akond08:02:30

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

dottedmag08:02:32

Я уже смотрю akar

dottedmag08:02:29

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

dottedmag08:02:33

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

akond08:02:13

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

dottedmag09:02:13

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

akond11:02:50

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

akond11:02:13

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

akond11:02:59

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

ažyliuk12:02:20

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

ažyliuk12:02:30

с примерами

ažyliuk12:02:55

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

dottedmag12:02:14

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

ažyliuk12:02:02

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

dottedmag12:02:38

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

dottedmag12:02:46

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

dottedmag18:02:56

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

dottedmag18:02:01

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

niquola19:02:03

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

misha19:02:20

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

misha19:02:45

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

misha19:02:19

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

dottedmag19:02:31

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

dottedmag19:02:50

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

dottedmag20:02:08

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

misha20:02:33

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

dottedmag20:02:58

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

misha20:02:12

instaparse

misha20:02:30

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

dottedmag20:02:41

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

niquola20:02:48

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

misha20:02:00

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

niquola20:02:26

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

dottedmag20:02:32

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

dottedmag20:02:32

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

misha20:02:33

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

misha20:02:23

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

niquola20:02:01

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

misha20:02:15

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

niquola20:02:43

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

niquola20:02:58

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

misha20:02:24

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

dottedmag20:02:32

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

dottedmag20:02:42

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

dottedmag20:02:51

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

misha20:02:59

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

dottedmag20:02:06

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

misha20:02:32

(-> % slurp clojure.pprint/pprint)

dottedmag20:02:38

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

misha20:02:04

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

misha20:02:12

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

dottedmag20:02:42

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

niquola20:02:53

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

dottedmag20:02:16

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

dottedmag20:02:28

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

dottedmag20:02:35

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

misha20:02:44

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

dottedmag20:02:03

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

misha20:02:18

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

misha20:02:40

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

dottedmag20:02:45

Дерево.

niquola20:02:14

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

misha20:02:19

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

dottedmag20:02:38

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

dottedmag20:02:31

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

dottedmag20:02:00

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

misha20:02:31

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

dottedmag20:02:44

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

dottedmag20:02:01

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

misha20:02:43

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

misha20:02:59

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