Skip to content

Instantly share code, notes, and snippets.

@daveray
Created November 23, 2012 07:00
Show Gist options
  • Save daveray/4134299 to your computer and use it in GitHub Desktop.
Save daveray/4134299 to your computer and use it in GitHub Desktop.
core.logic goal failure check
; clojure 1.4.0, core.logic 0.8.0-beta2
user=> (use 'clojure.core.logic)
nil
user=> (defn list?o
[v]
(conde
[(emptyo v)]
[(fresh [f] (firsto v f))]))
#'user/list?o
user=> (run* [q] (list?o [1 2 3]))
(_.0)
user=> (run* [q] (list?o 'x))
()
user=> (defn fail-goal [g]
(fn [a]
(if (nil? (g a))
a)))
#'user/fail-goal
user=> (run* [q] (fail-goal succeed))
()
user=> (run* [q] (fail-goal fail))
(_.0)
; looks good
user=> (run* [q] (fail-goal (list?o [1 2 3])))
()
; still good
user=> (run* [q] (fail-goal (list?o 'x)))
()
; wait, what?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment