name: ds-kanren version: 0.2.0.0 synopsis: A subset of the miniKanren language description: ds-kanren is an implementation of the language. . == What's in ds-kanren? . ['disconj'] Try the left and the right and gather solutions that satisfy either one. ['fresh'] Create a fresh logical variable ['==='] Equate two terms. This will backtrack if we can't unify them in this branch. ['run'] Actually run a logical computation and return results and the constraints on them. . In addition to these core combinators, we also export a few supplimentary tools. . ['=/='] The opposite of '===', ensure that the left and right never unify. . == The Classic Example . We can define the classic @appendo@ relationship by encoding lists in the Lisp "bunch-o-pairs" method. . > appendo :: Term -> Term -> Term -> Predicate > appendo l r o = > conde [ program [l === "nil", o === r] > , manyFresh $ \h t o -> > program [ Pair h t === l > , appendo t r o > , Pair h o === o ]] . Once we have a relationship, we can run it backwards and forwards as we can with most logic programs. . >>> let l = list ["foo", "bar"] . >>> map fst . runN 1 $ \t -> appendo t l l [nil] >>> map fst . runN 1 $ \t -> appendo l t l [nil] >>> map fst . runN 1 $ \t -> appendo l l t [(foo, (bar, (foo, (bar, nil))))] . == Related Links . Some good places to start learning about miniKanren would be . * * * license: MIT license-file: LICENSE author: Danny Gratzer maintainer: jozefg@cmu.edu category: Language build-type: Simple cabal-version: >=1.10 source-repository head type: hg location: http://bitbucket.org/jozefg/ds-kanren library exposed-modules: Language.DSKanren , Language.DSKanren.Core , Language.DSKanren.Sugar build-depends: base >=4 && <5 , containers >=0.4 , logict hs-source-dirs: src default-language: Haskell2010 Test-Suite test-unify: hs-source-dirs: test type: exitcode-stdio-1.0 main-is: Unify.hs hs-source-dirs: test build-depends: ds-kanren , tasty , tasty-quickcheck , QuickCheck , base >=4 && <5 default-language: Haskell2010 Test-Suite test-list-ops: hs-source-dirs: test type: exitcode-stdio-1.0 main-is: List.hs hs-source-dirs: test build-depends: ds-kanren , tasty , tasty-quickcheck , QuickCheck , base >=4 && <5 default-language: Haskell2010