adderall

Hy on Adderall - a miniKanren implementation in Hy


License
LGPL-3.0
Install
pip install adderall==2.0.0

Documentation

Adderall

Build Status Downloads Version

This library contains an implementation of miniKanren in Hy. It is a naive implementation, speed isn't the primary concern.

Example

(import [adderall.dsl [*]])
(require adderall.dsl)

(run* [q] (condᵉ [(≡ q 'tea)]
                 [(≡ q 'coffee) succeed]))
;; => ['tea 'coffee]

(run* [q] (condᵉ [(≡ q 'tea)]
                 [(≡ q 'coffee) fail]))
;; => ['tea]

(import [getpass [getuser]])

(deftag h [_] "#hy")
(defn lovesᵒ [u v] (≡ v #h y))
(run* [who what] (lovesᵒ who what)
                 (≡ who (getuser))
                 (≡ what #h y))
;; => [['algernon' '#hy']]

More examples can be found in the test suite, and in particular, the tests adapted from The Reasoned Schemer.

Adderall also comes with a set of extra functions, which are there mostly to show the power of the system, or for fun:

(import [adderall.dsl [*]]
        [adderall.extra.zebra [*]])
(require adderall.dsl)
(require adderall.extra.zebra)

(run* [water-drinker horse-owner] (zebraᵖ water-drinker horse-owner))
;; => [['norvegian 'japanese]]

For a practical use, see Hydiomatic, a static analyser and code transformer built upon Adderall, or wynck, a tool to reason about your window layout.

License

All the code is licensed under the GNU Lesser General Public License (v3+).