microKanren VS awesome-cl

Compare microKanren vs awesome-cl and see what are their differences.

microKanren

The implementation of microKanren, a featherweight relational programming language (by jasonhemann)

awesome-cl

A curated list of awesome Common Lisp frameworks, libraries and other shiny stuff. (by CodyReichert)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
microKanren awesome-cl
2 64
298 2,456
- -
0.0 8.7
almost 10 years ago 11 days ago
Scheme Makefile
- GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

microKanren

Posts with mentions or reviews of microKanren. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-11-14.
  • Lisp-Stick on a Python
    11 projects | news.ycombinator.com | 14 Nov 2022
    which uses a Lisp to define itself. This means roughly that if you understand enough Lisp to understand this program (and the little recursive offshoots like eval-cond), there is nothing else that you have to learn about Lisp. You officially have read the whole language reference and it is all down to libraries after that. Compare e.g. with trying to write Rust in Rust where I don't think it could be such a short program, so it takes years to feel like you fully understand Rust.

    Indirectly this also means that lisps are very close at hand for “I want to add a scripting language onto this thing but I don't want to, say, embed the whole Lua interpreter” and it allows you to store user programs in a JSON column, say. You also can adapt this to serialize environments so that you can send a read-only lexical closure from computer to computer, plenty of situations like that.

    Aside from the most famous, you have things like this:

    1. The heart of logic programming is also only about 50 lines of Scheme if you want to read that:

    https://github.com/jasonhemann/microKanren/blob/master/micro...

    2. Hygienic macros in Rust probably owe their existence to their appearance in Lisps.

    C2 asks the same question here: https://wiki.c2.com/?LispShowOffExamples with answers like

    3. The object model available in Common Lisp was more powerful than languages like Java/C++ because it had to fit into Lisp terms (“the art of the metaobject protocol” was the 1991 book that explained the more powerful substructure lurking underneath this object system), so a CL programmer could maybe use it to write a quick sort of aspect-oriented programming that would match your needs.

    4. Over there a link shows how in 16 LOC you can implement a new domain-specific language to define and run finite state machines: http://www.findinglisp.com/blog/2004/06/automaton-cleanup.ht...

  • William Byrd on Logic and Relational Programming, MiniKanren (2014)
    4 projects | news.ycombinator.com | 1 Jun 2021
    > I think that with such modern additions (i.e. apart from the cut) Prolog moves closer to the declarative ideal without sacrificing its all-around usability as a general purpose language. What do you think?

    I also used to think that Prolog was moving closer to the delcarative ideal. And I suspect that most expert Prolog programmers believe similarly.

    However, my attitude has changed in the past few years, after seeing Prolog programmers try to implement the relational interpreter from the 2017 ICFP pearl in Prolog.

    The problem is one of composing the pure features needed for expressing a program as complicated as the relational interpreter. (Of course, the relational interpreter is designed to be as short and simple as possible, bit it is still more complicated than pure relations you will find in a Prolog textbook, for example.)

    In theory, you can easily combine unification with the occurs check, SLG-resolution, disequality/disunification constraints, type constraints, etc., and avoid all impure uses of extra-logical features. In practice, I've seen people struggle to combine these features within a single Prolog implementation. In fact, after multiple attempts from multiple Prolog experts, I have yet to see a version of the relational Scheme interpreter in Prolog that can match the behavior of the miniKanren version.

    I'm not claiming that someone couldn't implement a full relational interpreter in Prolog. Obviously they could, since Prolog is Turing-complete. I'm only saying that the default choices of Prolog, plus the intricacies of combining multiple pure features (and leaving out standard and useful non-relational features), seems to make writing a relational interpreter much harder than I would have expected.

    If you are up for a challenge, I'd be happy to work on a Prolog version of the Scheme interpreter with you!

    Based on what I've seen from Prolog experts trying to reproduce the relational interpreter, and conversations with Prolog experts, my current thinking is that Prolog is actually not a good language for relational programming. Too many of the defaults must be adjusted or overridden, too many standard techniques and idioms must be abandoned, and too many potentially incompatible libraries must be composed in order to get everything "just right."

    The problem isn't that relational programming in Prolog isn't possible. The problem is that it requires enough work and non-standard techniques that in practice people don't do it.

    At least, that is what I observe as an outsider.

    If there is an easy way to combine features within a single FOSS Prolog implementation to allow for the types of relational programming we do in miniKanren, I'd be delighted to see it in action. I'd also be delighted to write a paper about it with you! :)

    > Finally, I'd like to know more about minikanrens' search. I'll look around on the internet, but is there a source you would recommend?

    I would recommend reading Jason Hemann and Dan Friedman's lovely little paper on microKanren, which gives a tutorial reconstruction of miniKanren's complete interleaving search, starting from depth-first search:

    http://webyrd.net/scheme-2013/papers/HemannMuKanren2013.pdf

    https://github.com/jasonhemann/microKanren

    The standard exercise for learning microKanren is to translate the resulting ~50 lines of Scheme code into the language of your choice.

    You might also like this more technical paper on the `LogicT` monad:

    Backtracking, interleaving, and terminating monad transformers: (functional pearl)

awesome-cl

Posts with mentions or reviews of awesome-cl. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-26.
  • 3 years of fulltime Rust game development, and why we're leaving Rust behind
    21 projects | news.ycombinator.com | 26 Apr 2024
    I know you're not asking for recommendations, but Lisp, particularly SBCL, really seems to check all your boxes. I say this as someone who generally reaches for Scheme when it comes to Lisps too.

    There are a few game engines[0] for CL, but most of them seem to be catered specifically to 2D games.

    [0] https://github.com/CodyReichert/awesome-cl?tab=readme-ov-fil...

  • KamilaLisp – A functional, flexible and concise Lisp
    6 projects | news.ycombinator.com | 1 Mar 2024
    Hello, a single counter-example I hope https://lispcookbook.github.io/cl-cookbook/editor-support.ht...

    (see more from https://github.com/CodyReichert/awesome-cl?tab=readme-ov-fil...

    https://cl-community-spec.github.io/pages/index.html

    and some more)

  • Why Is Common Lisp Not the Most Popular Programming Language?
    8 projects | news.ycombinator.com | 14 Feb 2024
    Everyone, if you don't have a clue on how's Common Lisp going these days, I suggest:

    https://lisp-journey.gitlab.io/blog/these-years-in-common-li... (https://www.reddit.com/r/lisp/comments/107oejk/these_years_i...)

    A curated list of libraries: https://github.com/CodyReichert/awesome-cl

    Some companies, the ones we hear about: https://github.com/azzamsa/awesome-lisp-companies/

    and oh, some more editors besides Emacs or Vim: https://lispcookbook.github.io/cl-cookbook/editor-support.ht... (Atom/Pulsar support is good, VSCode support less so, Jetbrains one getting good, Lem is a modern Emacsy built in CL, Jupyter notebooks, cl-repl for a terminal REPL, etc)

  • Common Lisp: An Interactive Approach (1992) [pdf]
    7 projects | news.ycombinator.com | 10 Oct 2023
    check out the editor section, there's more than Emacs these days: https://lispcookbook.github.io/cl-cookbook/editor-support.ht...

    - https://github.com/CodyReichert/awesome-cl for libraries

    - https://www.classcentral.com/report/best-lisp-courses/#ancho...

    - a recent overview of the ecosystem: https://lisp-journey.gitlab.io/blog/these-years-in-common-li... (shameless plug, on HN: https://news.ycombinator.com/item?id=34321090)

  • Spinneret: A modern Common Lisp HTML generator
    8 projects | news.ycombinator.com | 26 Sep 2023
    More HTML generators for CL: https://github.com/CodyReichert/awesome-cl#html-generators-a... there are lispy ones (Spinneret), Django-like ones (Djula, I like it, easy to use and extend), HTML-based allowing for inline Lisp code (Ten), JSX-like ones (lsx, markup), and more.
  • Common Lisp JSON parser?
    2 projects | /r/lisp | 17 Sep 2023
    https://github.com/CodyReichert/awesome-cl is usually a good place to find recommendations. Jzon is pretty good.
  • All of Mark Watson's Lisp Books
    6 projects | news.ycombinator.com | 24 Jul 2023
    > obstacles add up

    I actually agree. It wasn't smooth for me to ship my first CL app. It's all better now (more tools, more documentation, more blog posts from several people, more SO questions and answers!).

    > performant

    SBCL is in the same ballpack of C, Rust or Java in many benchmarks.

    In this article series, the author writes the same program in CL, Rust and Java. In fact, he copy-pastes a PG snippet from 30 years ago. This snippet beats Rust and Java in LOC and speed. But, yeah, he wasn't writing super efficient Rust code, so after many discussions, pull requests and sweating, the Rust code became the most performant. https://renato.athaydes.com/posts/revisiting-prechelt-paper-... It didn't take work to make the CL code performant, more so for the Rust one ;)

    a benchmark after sb-simd vectorization: https://preview.redd.it/vn5juu36v2681.png?width=715&format=p... (https://www.reddit.com/r/Common_Lisp/comments/riedio/quite_a...)

    > good tools for networking, for writing concurrent or asynchronous code, for graphics,

    I refer the reader to https://github.com/CodyReichert/awesome-cl but yes, CL won't have the best libraries in some scenarii (GUI? Tk libs are good, we have Gtk4, a Qt5 library used in production© by a big player but difficult to install etc)

    > it doesn't give you a good package manager or means of distributing code

    Quicklisp is neat, with limitations, that can be addressed with Qlot, ql-https, or CLPM or the newest ocicl.

  • How to Understand and Use Common Lisp
    5 projects | news.ycombinator.com | 14 May 2023
    It's a good book!

    Modern companions would be:

    - the Cookbook: https://lispcookbook.github.io/cl-cookbook/ (check out the editors section: Atom/Pulsar, VSCode, Sublime, Jetbrains, Lem...)

    - https://github.com/CodyReichert/awesome-cl to find libraries

    Also:

    - https://stevelosh.com/blog/2018/08/a-road-to-common-lisp/

    - https://news.ycombinator.com/item?id=34321090 2022 in review

  • Why Lisp?
    17 projects | news.ycombinator.com | 7 May 2023
    > static strong typing

    Alright, here is it: https://github.com/coalton-lang/coalton/

    > small efficient native binaries

    The numbers are: with SBCL's core-compression, a web app with dozens on dependencies will weight ±30 to 40MB. This includes the compiler, the debugger, etc. Without core compression, we reach ±150MB.

    > The actor runtime?

    the actor library: https://github.com/mdbergmann/cl-gserver

    > couldn't find a way to make money with it. I suspect many other programmers are in my boat.

    Alright. Some do, that's life. Yes, some companies go with CL even in 2023 (https://lisp-journey.gitlab.io/blog/lisp-interview-kina/, they released https://github.com/KinaKnowledge/juno-lang lately; Feetr (finance): https://twitter.com/feetr_io/status/1587182923911991303)

    https://github.com/azzamsa/awesome-lisp-companies/

    > Give us an HTTP (1.x & 2.0) and WebSockets libraries

    How so? We have those libraries. HTTP/2: https://github.com/zellerin/http2/

    https://github.com/CodyReichert/awesome-cl

  • Peter Norvig – Paradigms of AI Programming Case Studies in Common Lisp
    8 projects | news.ycombinator.com | 5 May 2023
    https://leanpub.com/lovinglisp -- this one is great, and the first thing I recommend

    https://lispcookbook.github.io/cl-cookbook/ -- also great and up to date

    https://awesome-cl.com/ -- for anything else.

What are some alternatives?

When comparing microKanren and awesome-cl you can also consider the following projects:

mediKanren - Proof-of-concept for reasoning over the SemMedDB knowledge base, using miniKanren + heuristics + indexing.

cl-str - Modern, simple and consistent Common Lisp string manipulation library.

dissertation-single-spaced - Single-spaced version of my dissertation, 'Relational Programming in miniKanren: Techniques, Applications, and Implementations'

awesome-lisp-companies - Awesome Lisp Companies

calysto_scheme - A Scheme kernel for Jupyter that can use Python libraries

coalton - Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.

trial - A fully-fledged Common Lisp game engine

Petalisp - Elegant High Performance Computing

clinch - Common Lisp 3D/2D Graphics Engine for OpenGL

ocaml - The core OCaml system: compilers, runtime system, base libraries

legit - CL interface to the GIT binary.

clog - CLOG - The Common Lisp Omnificent GUI