Hi, I am trying to write myself something to generate some test data, and I
thought
clojure.core logic fits the bill ... unfortunately, for some reason, it
doesn't work.
In my project.clj:
[org.clojure/clojure "1.5.0"]
[org.clojure/core.logic "0.8.3"]
in my namespace:
(ns tests.search
(:require
[clojure.set :refer [intersection difference union project select]]
[clojure.core.logic :as l]))
(def search-table
((fn [header table] (into #{} (map #(zipmap header %1) table)))
[:title :type :severity]
[[ "Squirrel" "enhancement" "low"]
[ "Camel" "security" "important"]
[ "Dog" "security" "critical"]
[ "Cow" "bugfix" "moderate"]]))
Now, I try to generate pairs [query result] with logic programming.
(l/run 1 [test-line]
(l/fresh [query result]
(l/== query ["\"" result "\""])
(l/membero result (map :name (project errata-search-table [:name])))
(l/== test-line [query result])))
>> ([["\"" "Squirrell" "\""] "Squirrell"])
But I can't figure out how to force query to unify to a string:
(l/run 1 [test-line]
(l/fresh [query result]
(l/== query (str "\"" result "\""))
(l/membero result (map :name (project errata-search-table [:name])))
(l/== test-line [query result])))
>> (["\"<lvar:result__11616>\"" "Squirrell"])
When I asked on freenode, I got this response:
<hyPiRion> asaleh: str is impure, using e.g. (fresh [x y] (== y (str x)))
won't work
Thanks,
Adam
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.