core.logic

Logic Threading Macro

Details

  • Type: Enhancement Enhancement
  • Status: Open Open
  • Priority: Minor Minor
  • Resolution: Unresolved
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None

Description

This macro was somewhat useful when I was implementing static analysis for a compiler with core.logic.

(defmacro ==>> [expr-in & rel-forms]
"Thread the expr-in through rel-forms then unify with last rel-forms
(the 'out expression').

Example:
(==>> [[1]] (firsto) (firsto) x))
;; 'x' will become bound to value 1

This macro expands to:
(fresh [_A _B]
(firsto [[1]] _A)
(firsto _A _B)
(== _B q))

If you imagine that the 'return value' of firsto is its last parameter,
then it works just like clojure.core/-> as return value of each form is
first argument of the following form."

Activity

Hide
Jason Jackson added a comment -

renamed ==>> to ==->

Show
Jason Jackson added a comment - renamed ==>> to ==->
Hide
Jason Jackson added a comment - - edited

There might be a better name, not sure.

Show
Jason Jackson added a comment - - edited There might be a better name, not sure.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated: