Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
bin
 
 
 
 
 
 
 
 
GPL
 
 
 
 
 
 
 
 
 
 

README.md

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+).

About

Hy on Adderall - a miniKanren implementation in Hy

Resources

Packages

No packages published
You can’t perform that action at this time.