View Source Differences from the Ruby library

  • variables are constructed explicitly rather than using the capitalized symbol convention
  • neg matchers can declare variables, although the variables are only used for unification if they're used more than once within the same template, and do not escape the scope of the matcher
  • maybe/optional matcher is not implemented since it's unclear at the moment whether it actually serves a purpose
  • overlays are not implemented, since the immutable nature of the language makes the entire feature redundant
  • self-invalidation detection is not implemented, since it is computationally quite expensive while still detecting only a small set of possible contradictions, which is likely impossible to solve in a general case anyway since it seems to boil down to the halting problem; so be aware that your rules may create infinite loops when you generate facts that invalidate their own creation