Liking cljdoc? Tell your friends :D

clojure.core.unify

core.unify is a Clojure & ClojureScript contrib library providing the following features:

  • Factory functions for constructing unification binding, subst, and unification functions, with or without occurs checking

  • Packaged functions for unification binding, subst, and unification functions, with or without occurs checking, recognizing variables tagged as symbols prefixed with ? characters

core.unify is based on a library named Unifycle, found at https://github.com/fogus/unifycle that has been deprecated.

more information

Differences from core.logic

core.unify provides a la carte unification facilities that are not deeply tied into the operation of a logic engine. While core.logic does provide a similar simple unifier interface with support for specifying fine-grained constraints, if you have no need for a logic programming system, core.unify may be a better fit.

Releases and Dependency Information

Latest stable release: 0.7.3

CLI/deps.edn dependency information:

org.clojure/core.unify {:mvn/version "0.7.3"}

Leiningen dependency information:

[org.clojure/core.unify "0.7.3"]

Maven dependency information:

<dependency>
  <groupId>org.clojure</groupId>
  <artifactId>core.unify</artifactId>
  <version>0.7.3</version>
</dependency>

Usage

Refer to docstrings in the clojure.core.unify namespace or browseable API documentation in docs/API.md.

    (use 'clojure.core.unify)

    (unifier '((?a * ?x ** 2) + (?b * ?x) + ?c)
         '(?z + (4 * 5) + 3))

    ;=> ((?a * 5 ** 2) + (4 * 5) + 3)

Developer Information

Running the tests at the command line against multiple CLJ versions:

./run-tests.sh

To generate the current API docs run the following:

clj -Tquickdoc quickdoc '{:outfile "docs/API.md", :github/repo "https://github.com/clojure/core.unify", :git/branch "master", :toc false}'

Change Log

  • Release 0.7.3 on 2026-05-21
    • UNIFY-3: Documentation cleanup
    • UNIFY-12: Fixed dropped occurs flag on recursive calls
    • UNIFY-13: Fixed CLJ-specific test
  • Release 0.7.2 on 2026-05-14
    • Fixed flatten-bindings to keep unresolved lvars and also bindings to nil
  • Release 0.7.1 on 2025-12-30
    • Update parent pom version
  • Release 0.7.0 on 2024.11.06
    • Add ClojureScript support
    • Drop Clojure 1.6 and 1.7 support
  • Release 0.6.0 on 2024.02.19
    • Update parent pom version
  • Release 0.5.7 on 2016.07.25
    • Fixed macro that produced invalid fn names
  • Release 0.5.6 on 2013.03.07
    • Removed nil bindings
  • Release 0.5.5 on 2013.01.25
    • Exposed lvar? function
    • Added extract-lvars function
    • Exposed flatten-bindings function
  • Release 0.5.4 on 2013.01.24
    • Added 3-arg version of unify and unify- allowing an additional environment map.
  • Release 0.5.3 on 2012.05.25
    • Added variable? function
    • Unification of seqs of differing lengths fails (as expected)
  • Release 0.5.2 on 2012.01.08
    • Removed reflection warnings
  • Release 0.5.1 on 2011.10.11
    • Rolled in basis of Unifycle

Copyright and License

Copyright (c) Rich Hickey and Michael Fogus. All rights reserved. The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (https://opensource.org/license/epl-1-0/) which can be found in the file epl-v10.html at the root of this distribution. By using this software in any fashion, you are agreeing to be bound bythe terms of this license. You must not remove this notice, or any other, from this software.

Can you improve this documentation? These fine people already did:
Fogus, fogus, Alex Miller, Sean Corfield & David Nolen
Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close