Правильно ли я понимаю, что у Вас это научная работа? Т.е. писать статьи, содержащие обзоры и сравнения с другими решениями, придется? Наш код открыт, написан на Haskell, можно поиграться. Надеюсь, что Haskell за 9-10 лет не слишком изменился…
Ага, научная. Мы правда сейчас отошли от общей задачи и реализаций в сторону всяких формализаций. Может кому-нибудь из коллег будет полезно, спасибо.
Есть коллекция примеров, которые, кстати, вполне мотивировали научную деятельность
Это которые тесты в репозитории? Вижу знакомые слова. А в чем состоит Driving task?
А есть где почитать про результаты?
Боюсь, что пока нет. Это вроде как work in progress.
Если что, мы к созданию miniKanren никакого отношения не имеем, мы только пытаемся заставить его работать чуточку лучше. Стоило более явно указать это в тексте.
Я прочитал Вашу статью, cудя и по семантике, и по примерам, XSG действительно сильно похож на базовую версию miniKanren (сильнее, чем тот же prolog). При этом в miniKanren'е не предусмотрены ни ленивость, ни недетерминизм в порядке поиска. У меня правда есть ощущение, что из-за недетерминизма при выборе исполняемого вызова функции (если я правильно понял) это должно работать неэффективно для больших по размеру программ (в miniKanren'е по крайней мере все попытки «попробуем несколько порядков одновременно» приводили к критическому замедлению).
Не пробовали на нем запрограммировать какую-нибудь задачу типа «У кого рыба» (http://udel.edu/~os/riddle.html)?
Да, у нас в лаборатории велась (не мной) работа по использованию miniKanren для всяких логических задачек и «загадка Эйнштейна» была первой из них. Не знаю получилось ли сразу с ней, но чтобы заставить заработать некоторые другие, насколько я знаю, пришлось использовать нетривиальные техники вроде мемоизации и, как раз, суперкомпиляции.
Да, справедливое замечание.
Мотвацией для нашего исследования было исправление неприятной проблемы в существующем (и даже известном в узких кругах) языке. Вопрос о мотивации и применимости самого языка более сложный, и я не настолько сильно в неё верю, чтобы подробно это расписать.
Главное, в моем представлении, это то, что Prolog стремится к наибольшей эффективности для своих задач и готов пожертвовать ради этого чистотой (в смысле побочных эффетов) и «логичностью» (в смысле, что там очень широко используются extra-logical features, такие как cut). miniKanren же наоборот заботится о «логичности» и благодаря этому программы получаются реляционными, то есть их вот так можно запускать в разные стороны. Наверное не будет сильным враньем сказать, что miniKanren сделан специально для парадигмы «программы как отношения» и лучше работает в ней, чем другие логические языки.
Ага, научная. Мы правда сейчас отошли от общей задачи и реализаций в сторону всяких формализаций. Может кому-нибудь из коллег будет полезно, спасибо.
Это которые тесты в репозитории? Вижу знакомые слова. А в чем состоит Driving task?
Боюсь, что пока нет. Это вроде как work in progress.
Я прочитал Вашу статью, cудя и по семантике, и по примерам, XSG действительно сильно похож на базовую версию miniKanren (сильнее, чем тот же prolog). При этом в miniKanren'е не предусмотрены ни ленивость, ни недетерминизм в порядке поиска. У меня правда есть ощущение, что из-за недетерминизма при выборе исполняемого вызова функции (если я правильно понял) это должно работать неэффективно для больших по размеру программ (в miniKanren'е по крайней мере все попытки «попробуем несколько порядков одновременно» приводили к критическому замедлению).
Да, у нас в лаборатории велась (не мной) работа по использованию miniKanren для всяких логических задачек и «загадка Эйнштейна» была первой из них. Не знаю получилось ли сразу с ней, но чтобы заставить заработать некоторые другие, насколько я знаю, пришлось использовать нетривиальные техники вроде мемоизации и, как раз, суперкомпиляции.
Мотвацией для нашего исследования было исправление неприятной проблемы в существующем (и даже известном в узких кругах) языке. Вопрос о мотивации и применимости самого языка более сложный, и я не настолько сильно в неё верю, чтобы подробно это расписать.
Больше деталей есть в стандартном (и очень большом) ответе на этот вопрос от автора языка.