Skip to content

brandonwillard/adderall

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

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

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

Stars

Watchers

Forks

Packages

No packages published