<!--
RSS generated by JIRA (4.4#649-r158309) at Sat May 25 21:07:03 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+LOGIC+AND+resolution+%3D+Unresolved+ORDER+BY+priority+DESC%2C+key+DESC&tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+LOGIC+AND+resolution+%3D+Unresolved+ORDER+BY+priority+DESC%2C+key+DESC</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="28" total="28"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[LOGIC-137] OOM when setting (interval 1 2) for 20 logic vars</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-137</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;The following two programs (presumably equivalent) both give me OOM (heap space):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [vs (repeatedly 20 l/lvar)]
  (l/run 1 [q]
     (l/== q vs)
     (l/everyg (fn [v] (fd/in v (fd/interval 1 2))) vs)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(l/run 1 [q]
         (l/fresh [x1 x2 x3 x4 x5 x6 x7 x8 x9
                   x10 x11 x12 x13 x14 x15
                   x16 x17 x18 x19 x20]
                  (l/== q [x1 x2 x3 x4 x5 x6 x7 x8 x9
                           x10 x11 x12 x13 x14 x15
                           x16 x17 x18 x19 x20])
                  (fd/in x1 x2 x3 x4 x5 x6 x7 x8 x9
                         x10 x11 x12 x13 x14 x15
                         x16 x17 x18 x19 x20
                         (fd/interval 1 2))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I assume the expected value is something like (&lt;span class=&quot;error&quot;&gt;&amp;#91;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&amp;#93;&lt;/span&gt;).&lt;/p&gt;</description>
                <environment>Clojure 1.5.1, both 0.8.3 and 0.8.4--994a7a3&lt;br/&gt;
&lt;br/&gt;
Running on a 1GB VM.</environment>
            <key id="16184">LOGIC-137</key>
            <summary>OOM when setting (interval 1 2) for 20 logic vars</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="gfredericks">Gary Fredericks</reporter>
                        <labels>
                    </labels>
                <created>Sat, 11 May 2013 18:40:43 -0500</created>
                <updated>Sat, 11 May 2013 18:40:43 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-136] Make benchmark suite as easy to run as `lein test`</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-136</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;`lein benchmark` (or some other non-lein-based incantation) prints a report listing the name of each benchmark and its timing. &lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;$ lein benchmark
membero 2839
zebra 152738
$ lein benchmark comparison-report {:baseline &lt;span class=&quot;code-quote&quot;&gt;&quot;benchmark-5.9.2013-1&quot;&lt;/span&gt;
                                    :runs 5
                                    :diffs-only &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
                                    :threshold 25} ; only consider different &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; the delta is &amp;gt; 25 ms.                                     
membero +68ms
zebra -122ms
$ lein benchmark {:pretty &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;}
Thu May  9 11:21:41 PDT 2013

Linux mars 2.6.32-5-amd64 #1 SMP Fri Feb 15 15:39:52 UTC 2013 x86_64 GNU/Linux

java version &lt;span class=&quot;code-quote&quot;&gt;&quot;1.7.0_21&quot;&lt;/span&gt;
Java(TM) SE &lt;span class=&quot;code-object&quot;&gt;Runtime&lt;/span&gt; Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

membero     2839 ms
zebra     152738 ms&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I haven&apos;t looked for any Clojure benchmarking libs, but ideally this would be a trivial script that automates the repetitive manual task of running benchmark tests. Unlike the test suite, we aren&apos;t looking for binary success or failure. Every run will generate unique results, so the script should accommodate a fuzzier comparison. &lt;/p&gt;

&lt;p&gt;A &quot;pretty&quot; output that includes system info would be great for bug reports. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16181">LOGIC-136</key>
            <summary>Make benchmark suite as easy to run as `lein test`</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 9 May 2013 13:27:58 -0500</created>
                <updated>Thu, 9 May 2013 13:44:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31076" author="dnolen" created="Thu, 9 May 2013 13:44:02 -0500"  >&lt;p&gt;Sounds like an excellent enhancement to me. Patch welcome for this.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-133] Add label goal</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-133</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This goal should enumerate any fd vars found in a fresh/ground var bound to a sequence. This would avoid some unintuitive behavior that came up on the mailing list:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defne weighted-listo [l w]
  ([() _] (fd/== w 0))
  ([[h . t] _]
    (fresh [n]
      (fd/in n (fd/interval 0 java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/MAX_VALUE))
      (fd/in h (fd/interval 1 java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/MAX_VALUE))
      (fd/+ h n w)
      (weighted-listo t n))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16171">LOGIC-133</key>
            <summary>Add label goal</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Apr 2013 14:21:18 -0500</created>
                <updated>Mon, 29 Apr 2013 14:21:18 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-128] add mod/rem/abs/min/max</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-128</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;SWI-Prolog&apos;s CLP(FD) module has this functionality &lt;a href=&quot;http://www.swi-prolog.org/man/clpfd.html&quot;&gt;http://www.swi-prolog.org/man/clpfd.html&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16122">LOGIC-128</key>
            <summary>add mod/rem/abs/min/max</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 2 Apr 2013 12:48:15 -0500</created>
                <updated>Tue, 2 Apr 2013 12:48:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-119] tie disequality</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-119</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest test-tie-disequality
  (is (= (run* [q]
           (nom/fresh [a b]
             (!= (nom/tie a a) &apos;hello)))
        &apos;(_0)))
  (is (= (run* [q]
           (nom/fresh [a b]
             (!= (nom/tie a a) (nom/tie b b))))
        ())))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Currently, the first causes an error, because IPersistentMap (which gets called because Tie is a record!) assumes that the the other term is also a record (that seems like a bug). If we revert the commit which makes Tie a record, this works.&lt;/p&gt;

&lt;p&gt;The other one succeeds, when it should fail. This is regardless of whether Tie is a record or not. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16081">LOGIC-119</key>
            <summary>tie disequality</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="namin">Nada Amin</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Mar 2013 05:37:38 -0500</created>
                <updated>Tue, 12 Mar 2013 05:52:35 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30739" author="namin" created="Tue, 12 Mar 2013 05:52:35 -0500"  >&lt;p&gt;quick fix in &lt;a href=&quot;https://github.com/clojure/core.logic/commit/8af0f45f8d1cb515ec7a00e5acd751562a31bb37&quot;&gt;https://github.com/clojure/core.logic/commit/8af0f45f8d1cb515ec7a00e5acd751562a31bb37&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;for actually doing != modulo alpha equivalence requires the opposite of nom/hash.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-118] prep does not make lvar of ?x if ?x is in a vector</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-118</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;In latest master:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (use &apos;clojure.core.logic.unifier)
user=&amp;gt; (prep &apos;([?x]))
([&amp;lt;lvar:?x&amp;gt;]) ;; ok. ?x turned into an lvar
user=&amp;gt; (prep &apos;([?x] . ?xs))
([?x] . &amp;lt;lvar:?xs&amp;gt;) ;; fail. ?x is not an lvar&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The last expression should return (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;lvar:?x&amp;gt;&amp;#93;&lt;/span&gt; . &amp;lt;lvar:?xs&amp;gt;)&lt;/p&gt;</description>
                <environment></environment>
            <key id="16079">LOGIC-118</key>
            <summary>prep does not make lvar of ?x if ?x is in a vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jonase">Jonas Enlund</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 15:50:38 -0500</created>
                <updated>Sun, 17 Mar 2013 11:42:39 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30738" author="jonase" created="Tue, 12 Mar 2013 00:11:42 -0500"  >&lt;p&gt;patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/LOGIC-118&quot; title=&quot;prep does not make lvar of ?x if ?x is in a vector&quot;&gt;LOGIC-118&lt;/a&gt;.diff fixes this issue. I&apos;m not sure if it does so correctly.&lt;/p&gt;</comment>
                    <comment id="30779" author="dnolen" created="Sun, 17 Mar 2013 11:42:39 -0500"  >&lt;p&gt;It&apos;s seem to me that this should be corrected in prep*? It looks like the issue is that prep* only handles seqs and not collections in general.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11908" name="LOGIC-118.diff" size="935" author="jonase" created="Tue, 12 Mar 2013 00:10:31 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-117] one-shot constraints with multiple rands may run more than once</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-117</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Here are two examples using fixc:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(run* [q]
  (fresh [x y]
    (fixc [x y]
      (fn [[x y] a _] (!= x 1))
      (fn [[x y] a] (= (walk a x) (walk a y)))
      &apos;...)
    (== x y)))

(run* [q]
  (fresh [x y c d]
    (fixc [x y]
      (fn [[x y] a _] (!= x y))
      (fn [[x y] a] (or (not (lvar? (walk a x))) (not (lvar? (walk a y)))))
      &apos;...)
    (== [x y] [[c] [d]])))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The constraint != is reified twice in each example, showing that the fixc constraint indeed ran twice.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16078">LOGIC-117</key>
            <summary>one-shot constraints with multiple rands may run more than once</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="namin">Nada Amin</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 15:10:20 -0500</created>
                <updated>Tue, 19 Mar 2013 01:36:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30790" author="dnolen" created="Sun, 17 Mar 2013 19:27:57 -0500"  >&lt;p&gt;For the first example I see the following as a result on master:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;((_0 :- (!= (_1 1))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Is this what you&apos;re seeing? As x isn&apos;t even part of the answer I wonder if we should show these constraints?&lt;/p&gt;</comment>
                    <comment id="30796" author="namin" created="Tue, 19 Mar 2013 01:36:02 -0500"  >&lt;p&gt;I changed the reifier by setifying the set of constraints, hence you get only one result now. So my illustration is now out-of-date but the problem remains. It&apos;s a separate issue to filter out irrelevant constraints, and I agree it should be done (I try to do it for the nominal constraints).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-114] stack overflow with conda/u</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-114</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns test
  (:refer-clojure :exclude [==])
  (:require
   [clojure.core.logic :refer :all]))
 
(defn foo [in out]
  (matcha 
   [in out]
   ([(&apos;and a b . ()) (&apos;and x y . ())] (foo a x) (foo b y))
   ([a (&apos;bar (&apos;baz a . ()) . ())])))
 
;; I get a stack overflow with the following, but &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; I remove one conjunct, then it will run.
 
(run 1 [q] (foo
            &apos;(and p
                  (and p
                       (and p
                            (and p
                                 (and p
                                      (and p
                                           (and p
                                                (and p
                                                     (and p
                                                          (and p
                                                               (and p p)))))))))))
            q))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16012">LOGIC-114</key>
            <summary>stack overflow with conda/u</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Feb 2013 13:15:03 -0600</created>
                <updated>Sun, 17 Mar 2013 21:02:42 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30601" author="dnolen" created="Thu, 14 Feb 2013 13:22:04 -0600"  >&lt;p&gt;It looks this issue still exists even if you swap the matcha with matche&lt;/p&gt;</comment>
                    <comment id="30607" author="austinhaas" created="Thu, 14 Feb 2013 20:06:52 -0600"  >&lt;p&gt;I think the overflow is occurring during reification.&lt;/p&gt;

&lt;p&gt;I was getting this error when returning a result from run, but now that I&apos;m using the same value as the input to another goal there is no overflow.&lt;/p&gt;

&lt;p&gt;If you replace q in the foo call with a fresh variable, it will not overflow.&lt;/p&gt;</comment>
                    <comment id="30791" author="dnolen" created="Sun, 17 Mar 2013 19:30:32 -0500"  >&lt;p&gt;This works for me on master. Can you give me more specifics about your setup so I can try to recreate? I&apos;m on OS X 10.8 running JDK 7 64bit.&lt;/p&gt;</comment>
                    <comment id="30793" author="austinhaas" created="Sun, 17 Mar 2013 20:50:19 -0500"  >&lt;p&gt;I don&apos;t see the issue anymore, but I believe I was using Java 1.6 when I reported it and now I am using:&lt;/p&gt;


&lt;p&gt;$ java -version&lt;br/&gt;
java version &quot;1.7.0_15&quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)&lt;/p&gt;</comment>
                    <comment id="30794" author="dnolen" created="Sun, 17 Mar 2013 21:02:42 -0500"  >&lt;p&gt;OK, thanks for the quick response, I&apos;ll double check how things look under 1.6.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-99] StackOverflow for large `appendo`</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-99</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def l (range 0 2000))
(run* [q] (appendo l l q))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Stacktrace&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (def l (range 0 2000))
#&apos;user/l
user=&amp;gt; (run* [q] (appendo l l q))
StackOverflowError   clojure.core.logic.LVar (logic.clj:1307)
user=&amp;gt; (pst)
StackOverflowError 
    clojure.core.logic.LVar (logic.clj:1307)
    clojure.lang.KeywordLookupSite$1.get (KeywordLookupSite.java:45)
    clojure.core.logic.LVar (logic.clj:1325)
    clojure.lang.Util.equiv (Util.java:32)
    clojure.lang.PersistentHashMap$BitmapIndexedNode.find (PersistentHashMap.java:601)

    clojure.lang.PersistentHashMap$ArrayNode.find (PersistentHashMap.java:370)
    clojure.lang.PersistentHashMap$ArrayNode.find (PersistentHashMap.java:370)
    clojure.lang.PersistentHashMap.entryAt (PersistentHashMap.java:133)
    clojure.lang.RT.find (RT.java:720)
    clojure.core/find (core.clj:1432)
    clojure.core.logic.Substitutions (logic.clj:1134)
    clojure.core.logic/walk*/fn--2847 (logic.clj:1005)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15947">LOGIC-99</key>
            <summary>StackOverflow for large `appendo`</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 5 Jan 2013 14:43:28 -0600</created>
                <updated>Mon, 7 Jan 2013 21:13:52 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30379" author="dnolen" created="Sat, 5 Jan 2013 14:44:47 -0600"  >&lt;p&gt;I cannot recreate on my machine but should try a large N &amp;amp; wait and see.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-89] Allow application again in pattern matches</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-89</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Perhaps we can support simple function application in the following manner.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defne substo [e &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a out]
  ([&apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~a) _ _ &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;])
  ([&apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~y) _ _ &apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~y)] (nom/hash a y))
  ([&apos;(app ~rator ~rand) _ _ &apos;(app ~rator-res ~rand-res)]
     (substo rator &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a rator-res)
     (substo rand &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a rand-res))
  ([&apos;(lam ~(nom/tie c body)) _ _ &apos;(lam ~(nom/tie c body-res))]
     (nom/hash c a) (nom/hash c &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;)
     (substo body &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a body-res)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If we have a seq in an unquote then we know we have an application. All function symbols are left alone, all arguments are considered to be fresh vars or locals.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15934">LOGIC-89</key>
            <summary>Allow application again in pattern matches</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                        <label>0.8.0</label>
                    </labels>
                <created>Tue, 1 Jan 2013 12:30:19 -0600</created>
                <updated>Mon, 7 Jan 2013 11:24:04 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-68] add Prolog meta-logical predicates bagof, setof, findall</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-68</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This can be done by annotating logic variables and embedding a run within a run by passing in the current substitution, running on it, and extracting out the reified values and unifying it back into the current substitution.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15826">LOGIC-68</key>
            <summary>add Prolog meta-logical predicates bagof, setof, findall</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 16 Nov 2012 13:20:26 -0600</created>
                <updated>Wed, 13 Feb 2013 13:50:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29956" author="abrooks" created="Fri, 16 Nov 2012 13:23:57 -0600"  >&lt;p&gt;I&apos;m working on understanding the answers given for this StackOverflow question:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/7647758/prolog-findall-implementation&quot;&gt;http://stackoverflow.com/questions/7647758/prolog-findall-implementation&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29957" author="abrooks" created="Fri, 16 Nov 2012 22:02:47 -0600"  >&lt;p&gt;For discussion &#8212; Initial working patch supporting nested version of &apos;run-a/&apos;run-a*. Binding symbols must match existing lvars with which vectors of all returned values will be unified.&lt;/p&gt;</comment>
                    <comment id="29958" author="abrooks" created="Sat, 17 Nov 2012 16:07:32 -0600"  >&lt;p&gt;Should we provide wrappers that emulate each of bagof, setof and findall?&lt;/p&gt;

&lt;p&gt;I&apos;m still not sold on the current names run-a/run-a*. &quot;a&quot; is really an internal implementation detail. Expect a revised patch with better names when I think of them (any ideas?).&lt;/p&gt;</comment>
                    <comment id="29960" author="dnolen" created="Sat, 17 Nov 2012 20:32:53 -0600"  >&lt;p&gt;Yes please. Yeah I don&apos;t think the names of run-a/etc are critical - implementation details for now until we really understand the implications and it gets some use.&lt;/p&gt;</comment>
                    <comment id="30001" author="abrooks" created="Wed, 21 Nov 2012 10:51:16 -0600"  >&lt;p&gt;I&apos;m considering simply making &lt;tt&gt;run&lt;/tt&gt;/&lt;tt&gt;run*&lt;/tt&gt; conditionalized on the first argument, using the nesting form if we are being called with a substitution map as the first argument.&lt;/p&gt;

&lt;p&gt;My current understanding of &lt;tt&gt;bagof&lt;/tt&gt; and &lt;tt&gt;findall&lt;/tt&gt; makes me think they&apos;re not worth implementing beyond the nesting &lt;tt&gt;run&lt;/tt&gt; functionality.&lt;/p&gt;

&lt;p&gt;I&apos;m still thinking about &lt;tt&gt;setof&lt;/tt&gt; which is quite useful and will want help from the infrastructure to be fully efficient.&lt;/p&gt;

&lt;p&gt;I&apos;ll submit a new patch after Thanksgiving.&lt;/p&gt;</comment>
                    <comment id="30002" author="dnolen" created="Wed, 21 Nov 2012 10:57:21 -0600"  >&lt;p&gt;Excellent, thanks much.&lt;/p&gt;</comment>
                    <comment id="30175" author="abrooks" created="Thu, 6 Dec 2012 00:30:03 -0600"  >&lt;p&gt;I have not forgotten, I&apos;ve just gotten swamped.&lt;/p&gt;

&lt;p&gt;There&apos;s a small chance I&apos;ll get to this before Christmas, otherwise, it&apos;s after the new year.&lt;/p&gt;</comment>
                    <comment id="30547" author="abrooks" created="Mon, 4 Feb 2013 17:50:05 -0600"  >&lt;p&gt;After a car accident, travel to London and Morocco, getting caught up at work and getting caught up on the apparently very busy stream of core.logic activity (great work!), I&apos;m back on this.&lt;/p&gt;

&lt;p&gt;I found some bugs in my implementation after porting the patch forwards and realized these issues highlighted my sloppy understanding of some of the semantics I had created.&lt;/p&gt;

&lt;p&gt;I&apos;m fairly convinced now that we don&apos;t want to name this after &lt;tt&gt;run&lt;/tt&gt; or &lt;tt&gt;run*&lt;/tt&gt;. It&apos;s too much of a strain to try to make it mean the same thing in a nested context.&lt;/p&gt;

&lt;p&gt;The current mechanism is still not quite a match for &lt;tt&gt;findall&lt;/tt&gt;/&lt;tt&gt;bagof&lt;/tt&gt;/&lt;tt&gt;setof&lt;/tt&gt;, however, so I&apos;m seeing what a good fit would be. I&apos;ll post meaningful thoughts for review as I have them.&lt;/p&gt;</comment>
                    <comment id="30589" author="dnolen" created="Wed, 13 Feb 2013 13:50:21 -0600"  >&lt;p&gt;Glad to hear you&apos;re OK! No worries, will take a patch whenever you get around to one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11683" name="0001-LOGIC-68-Add-run-a-run-a-logic-functions-to-support-.patch" size="1720" author="abrooks" created="Fri, 16 Nov 2012 22:02:47 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-47] is macro needs to be improved</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-47</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;the is macro should work like the following:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(is x (- (+ a b) c))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All locals appearing in the right expression should be walked.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15655">LOGIC-47</key>
            <summary>is macro needs to be improved</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Aug 2012 11:33:22 -0500</created>
                <updated>Thu, 30 Aug 2012 11:33:22 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-38] Logic Threading Macro</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-38</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This macro was somewhat useful when I was implementing static analysis for a compiler with core.logic.&lt;/p&gt;

&lt;p&gt;(defmacro ==&amp;gt;&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;expr-in &amp;amp; rel-forms&amp;#93;&lt;/span&gt;&lt;br/&gt;
  &quot;Thread the expr-in through rel-forms then unify with last rel-forms&lt;br/&gt;
   (the &apos;out expression&apos;).&lt;/p&gt;

&lt;p&gt;   Example:&lt;br/&gt;
     (==&amp;gt;&amp;gt; [&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;] (firsto) (firsto) x))&lt;br/&gt;
     ;; &apos;x&apos; will become bound to value 1&lt;/p&gt;

&lt;p&gt;   This macro expands to:&lt;br/&gt;
   (fresh &lt;span class=&quot;error&quot;&gt;&amp;#91;_A _B&amp;#93;&lt;/span&gt;&lt;br/&gt;
     (firsto [&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;]  _A)&lt;br/&gt;
     (firsto _A     _B)&lt;br/&gt;
     (==     _B     q))&lt;/p&gt;

&lt;p&gt;   If you imagine that the &apos;return value&apos; of firsto is its last parameter,&lt;br/&gt;
   then it works just like clojure.core/-&amp;gt; as return value of each form is&lt;br/&gt;
   first argument of the following form.&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15441">LOGIC-38</key>
            <summary>Logic Threading Macro</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sun, 13 May 2012 11:07:24 -0500</created>
                <updated>Sun, 13 May 2012 11:19:08 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28492" author="jasonjckn" created="Sun, 13 May 2012 11:08:53 -0500"  >&lt;p&gt;There might be a better name, not sure. &lt;/p&gt;</comment>
                    <comment id="28493" author="jasonjckn" created="Sun, 13 May 2012 11:18:09 -0500"  >&lt;p&gt;renamed ==&amp;gt;&amp;gt; to ==-&amp;gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11214" name="0001-added-logic-threading-macro.patch" size="3805" author="jasonjckn" created="Sun, 13 May 2012 11:18:09 -0500" />
                    <attachment id="11213" name="0001-added-logic-threading-macro.patch" size="3800" author="jasonjckn" created="Sun, 13 May 2012 11:07:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-30] Add persistent memory tables</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-30</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Rels currently complect identity and value, and are not first class. This enhancement provides a single-arity relation as a first class persistent value. Equality (and hash code) is defined in terms of the ITableRel protocol, leaving the door open for alternative implementations.&lt;/p&gt;

&lt;p&gt;The implementation provide in the attached patch is a hair faster than Rels in the single index case. The query strategy used in the multiple index case may or may not be faster than the one employed by Rels depending on the data. This could easily be made configurable, if desired.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15272">LOGIC-30</key>
            <summary>Add persistent memory tables</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="qbg">Brian Goslinga</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Mar 2012 19:58:23 -0600</created>
                <updated>Sun, 17 Mar 2013 18:53:34 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30785" author="dnolen" created="Sun, 17 Mar 2013 18:53:34 -0500"  >&lt;p&gt;ThreatGRID has a really nice simple implementation going here that they are already using in production - &lt;a href=&quot;http://github.com/threatgrid/pldb&quot;&gt;http://github.com/threatgrid/pldb&lt;/a&gt;. We should probably just integrate it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10990" name="0001-Added-persistent-memory-tables.patch" size="9337" author="qbg" created="Fri, 9 Mar 2012 19:58:23 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-130] StackOverFlowError when walking over set</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-130</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Walking a Clojure set seems to cause a StackOverFlowError:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(run* [?s] (== ?s #{1 2 3}))

(let [s #{1 2 3}] (run* [?s] (== ?s s)))

(run* [?convertedseq ?seq] 
  (== ?seq #{1 2 3})
  (project [?seq]
    (== ?convertedseq (vector ?seq))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;StackOverflowError 
	clojure.core.logic/walk*/fn--2722 (logic.clj:216)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)
	clojure.core.logic/walk*/fn--2722 (logic.clj:218)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)
	clojure.core.logic/walk*/fn--2722 (logic.clj:218)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>core.logic 0.8.3 &lt;br/&gt;
Clojure 1.5</environment>
            <key id="16146">LOGIC-130</key>
            <summary>StackOverFlowError when walking over set</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cderoove">Coen De Roover</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Apr 2013 16:55:33 -0500</created>
                <updated>Tue, 16 Apr 2013 17:28:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30964" author="dnolen" created="Tue, 16 Apr 2013 17:28:27 -0500"  >&lt;p&gt;core.logic no longer supports unification of sets so you&apos;re just seeing an error as result of a complete lack of support. I&apos;m not against supporting basic unification of completely grounded sets, as then we only need to test for equality, but I&apos;m inclined to make the system throw if any logic vars appear in the sets.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-129] matcha/matchu are not faithful to the semantics of conda/condu</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-129</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;The semantics of conda and condu give special importance to the head of each clause, but the pattern matching macros in core.logic that are built on top of them merge the body into the head. That means that every expression in a body position is considered when deciding which line is chosen, rather than just the expression in the head position. This is because the entire clause is wrapped in a fresh expression to bind the implicitly specified lvars that appear in the pattern.&lt;/p&gt;

&lt;p&gt;To illustrate:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(matcha [&apos;a]
    [[&apos;a] u#]
    [[&apos;a] s#])

;; expands to:

(conda
  [(fresh [] (== &apos;a &apos;a) u#)]
  [(fresh [] (== &apos;a &apos;a) s#)])

;; which has a different meaning than:

(conda
  [(== &apos;a &apos;a) u#]
  [(== &apos;a &apos;a) s#])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ideally, we could devise a new system to marry the semantics of conda with pattern matching. At the very least, I think the offending macros should carry a warning in their docstring, stating this semantic difference.&lt;/p&gt;

&lt;p&gt;I suspect this would also cause the &quot;Third Commandment&quot; warning to apply to the entire line, rather than just the head/question, but I have not investigated that issue.&lt;/p&gt;

&lt;p&gt;Here&apos;s an example that demonstrates the difference in meaning:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; This does not succeed, because we commit to the first line, 
;; since the question succeeds, but then fail in the body.

(run* [q]
  (conda
   [(== &apos;a &apos;a) u#]
   [(== &apos;a &apos;a) s#]))

;; =&amp;gt; ()

;; This succeeds, because the whole line is used to determine which line to commit to, 
;; rather than just the pattern matching clause at the head. So when the first line fails,
;; the second line is tried.

(run* [q]
  (matcha [&apos;a]
   [[&apos;a] u#]
   [[&apos;a] s#]))

;; =&amp;gt; (_0)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16127">LOGIC-129</key>
            <summary>matcha/matchu are not faithful to the semantics of conda/condu</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 4 Apr 2013 14:30:40 -0500</created>
                <updated>Thu, 4 Apr 2013 17:16:54 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30869" author="austinhaas" created="Thu, 4 Apr 2013 14:35:44 -0500"  >&lt;p&gt;For reference:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;&lt;a name=&quot;TheThirdCommandment&quot;&gt;&lt;/a&gt;The Third Commandment&lt;/h3&gt;

&lt;p&gt;If prior to determining the question of a conda (or condu) line a variable is fresh, it must remain fresh in the question of that line.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;From The Reasoned Schemer.&lt;/p&gt;</comment>
                    <comment id="30870" author="dnolen" created="Thu, 4 Apr 2013 17:16:54 -0500"  >&lt;p&gt;Good catch I need to think about this one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-123] Allow unification with sequential in both directions</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-123</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Currently I can&apos;t find a way to enable a custom data type to do unification with sequential objects in both direction. You can use IUnifyTerms to make it work in one direction, but it isn&apos;t possible to make it work in the other direction (i.e. when the sequential object is first).&lt;/p&gt;

&lt;p&gt;The problem seemes to be in the following code:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn unify-with-sequential* [u v s]
  (cond
    (sequential? v)
    (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (and (counted? u) (counted? v)
          (not= (count u) (count v)))
      nil
      (loop [u u v v s s]
        (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq u)
          (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq v)
            (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let [s (unify s (first u) (first v))]
              (recur (next u) (next v) s)
              nil)
            nil)
          (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq v) nil s))))
    
    (lcons? v) (unify-terms v u s)
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; nil))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the final nil could be replaced with a call to a protocol (IUnifyTermsReversed ???IUnifyWithSequential ???) then I believe it would make this extensible.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16104">LOGIC-123</key>
            <summary>Allow unification with sequential in both directions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="mikera">Mike Anderson</reporter>
                        <labels>
                    </labels>
                <created>Sat, 23 Mar 2013 21:10:33 -0500</created>
                <updated>Tue, 26 Mar 2013 01:07:40 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30807" author="dnolen" created="Sat, 23 Mar 2013 21:53:56 -0500"  >&lt;p&gt;I&apos;m assume it&apos;s undesirable for your datatype to implement ISequential?&lt;/p&gt;</comment>
                    <comment id="30808" author="mikera" created="Sat, 23 Mar 2013 23:06:43 -0500"  >&lt;p&gt;It&apos;s undesirable because an expression can be a leaf node as well:&lt;/p&gt;

&lt;p&gt;(+ 3 X) ;; OK as sequential&lt;br/&gt;
7       ;; definitely not sequential!&lt;/p&gt;

&lt;p&gt;Hence making Expression implement ISequential would be problematic and break all kinds of contracts.....&lt;/p&gt;

&lt;p&gt;Trying to unify the leaf node with a sequential object should fail of course, but that&apos;s logic I need to implement myself (I think??)&lt;/p&gt;</comment>
                    <comment id="30809" author="dnolen" created="Sun, 24 Mar 2013 12:11:50 -0500"  >&lt;p&gt;I&apos;m still not following as there&apos;s some context about your use case that I&apos;m missing. Do you have a concrete core.logic example that you should think should work?&lt;/p&gt;</comment>
                    <comment id="30811" author="mikera" created="Mon, 25 Mar 2013 02:21:15 -0500"  >&lt;p&gt;Sure, here is my test case:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [ex1 (ex [+ 1 X])]  ;; an expression containing (+ 1 X) 
  (is (= [(ex X)] (run* [q] (fresh [op p] (== [op p q] ex1)))))  ;; fails
  (is (= [(ex X)] (run* [q] (fresh [op p] (== ex1 [op p q])))))  ;; OK
)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first case fails (because of unify-with-sequential* returning nil as above). The second case is OK because it goes through my own implementation of IUnifyTerms. I may be wrong, but I don&apos;t think I can make it work without a change in core.logic itself.&lt;/p&gt;</comment>
                    <comment id="30815" author="dnolen" created="Mon, 25 Mar 2013 07:39:21 -0500"  >&lt;p&gt;We used to support unifying in both directions but it made for a large number of protocols that had to be implemented. Recently I&apos;ve been thinking it may be useful to provide coercion protocols, something like ICoerceToSequential. &lt;/p&gt;</comment>
                    <comment id="30820" author="mikera" created="Mon, 25 Mar 2013 19:37:36 -0500"  >&lt;p&gt;I think it is necessary to be able to support unifying in both directions somehow if custom data structures are ever going to be first-class citizens in core.logic?&lt;/p&gt;

&lt;p&gt;I see how you could achieve this with ICoerceToSequential however so that might be a good solution. We do something a bit similar in core.matrix (to handle coercions between different back-end matrix implementations).&lt;/p&gt;</comment>
                    <comment id="30821" author="dnolen" created="Mon, 25 Mar 2013 19:44:48 -0500"  >&lt;p&gt;custom data structures are already first class. Whether we should allow overloading unification of custom types with core Clojure interfaces/protocols/types is another matter entirely. &lt;/p&gt;

&lt;p&gt;And sorry for the confusion. It&apos;s not clear to me why you want sequential to work, from your examples it appears that you have a proper expression type, what advantage is there for you to unify with sequential?&lt;/p&gt;</comment>
                    <comment id="30823" author="mikera" created="Tue, 26 Mar 2013 01:07:40 -0500"  >&lt;p&gt;I think it may be important if you have &quot;sequence-like&quot; data structures that aren&apos;t precisely sequential? but are conceptually equivalent to sequences. My custom Expression type is one example, and for interop reasons things like java.util.ArrayList spring to mind.&lt;/p&gt;

&lt;p&gt;As it happens, I&apos;ve switched back to using regular lists for the moment so the issue isn&apos;t a blocker for me. But it may still be worth thinking about.&lt;/p&gt;

&lt;p&gt;Couple of advantages of doing this kind of unification would appear to be:&lt;br/&gt;
a) notational - you can use regular Clojure lists and vectors for unifying with something sequence-like&lt;br/&gt;
b) efficiency - avoid constructing a new custom object when it isn&apos;t needed (though the cost is probably too trivial to bother about in most cases....)&lt;/p&gt;

&lt;p&gt;Of course, you may decide it is simpler and purer to avoid these complications, which is fine. But it seems a shame to have all the nice extensible protocols, and not quite be able to fully extend the functionality to custom types....&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-87] Decomplect the narrowing of the constraint space from the search order</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-87</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;From a high-level point of view a constraint solver takes a constraint space, generates a tree of narrowings of the space and runs some search algorithm on the tree. Core.logic complects the generation of this tree and the search algorithm by representing the search space as a lazy stream of the leaves of the tree. By explicitly representing the search tree we get new search algorithms, optional fair conjunction and parallel search via fork-join. &lt;/p&gt;

&lt;p&gt;More detail: &lt;a href=&quot;http://scattered-thoughts.net/blog/2012/12/19/search-trees-and-core-dot-logic/&quot;&gt;http://scattered-thoughts.net/blog/2012/12/19/search-trees-and-core-dot-logic/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github fork: &lt;a href=&quot;https://github.com/clojure/core.logic/pull/13&quot;&gt;https://github.com/clojure/core.logic/pull/13&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attached is a cleaned-up patch against d68e3400472c5f745e4c13d64433459e11ba4871&lt;/p&gt;</description>
                <environment></environment>
            <key id="15928">LOGIC-87</key>
            <summary>Decomplect the narrowing of the constraint space from the search order</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jamii">Jamie Brandon</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Dec 2012 15:01:29 -0600</created>
                <updated>Fri, 28 Dec 2012 00:41:40 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30332" author="dnolen" created="Fri, 28 Dec 2012 00:41:40 -0600"  >&lt;p&gt;Thanks! Will try to find some time this weekend to do a thorough review.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11781" name="flexible_search.patch" size="14247" author="jamii" created="Thu, 27 Dec 2012 15:01:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-86] make `defc` more useful</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-86</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;As we start adding more constraints it&apos;s becoming clear we really want to have to specify less boiler plate. Instead of:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn -treec
  ([x fc cform] (-treec x fc cform nil))
  ([x fc cform _id]
     (reify
       clojure.lang.IFn
       (invoke [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; a]
         (let [x (walk a x)]
           (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (tree-term? x)
             ((composeg
               (constrain-tree x
                 (fn [t a] ((treec t fc cform) a)))
               (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a)
             ((composeg
               (fc x)
               (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a))))
       IConstraintId
       (id [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;] _id)
       IWithConstraintId
       (with-id [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; _id]
         (-treec x fc cform _id))
       IConstraintOp
       (rator [_] `treec)
       (rands [_] [x])
       IReifiableConstraint
       (reifyc [_ v r a]
         (let [x (walk* r x)]
           `(treec ~x ~cform)))
       IRelevant
       (-relevant? [_ a] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)
       IRunnable
       (runnable? [_ a]
         (not (lvar? (walk a x))))
       IConstraintWatchedStores
       (watched-stores [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;] #{::subst}))))

(defn treec [x fc cform]
  (cgoal (-treec x fc cform)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We should be able to write just:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defc treec [x fc cform]
  clojure.lang.IFn
  (invoke [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; a]
    (let [x (walk a x)]
      (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (tree-term? x)
        ((composeg
          (constrain-tree x
            (fn [t a] ((treec t fc cform) a)))
          (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a)
        ((composeg
          (fc x)
          (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a))))
  IConstraintRands
  (rands [_] [x])
  IReifiableConstraint
  (reifyc [_ v r a]
    (let [x (walk* r x)]
      `(treec ~x ~cform))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;`defc` should intelligently fill in the details.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15926">LOGIC-86</key>
            <summary>make `defc` more useful</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Dec 2012 17:27:08 -0600</created>
                <updated>Sun, 17 Mar 2013 18:30:51 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-80] add fne, anonymous version of defne</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-80</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15901">LOGIC-80</key>
            <summary>add fne, anonymous version of defne</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Dec 2012 10:13:04 -0600</created>
                <updated>Fri, 17 May 2013 00:53:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="31038" author="stanislas" created="Wed, 1 May 2013 10:24:07 -0500"  >&lt;p&gt;The macros &apos;fnm&apos; (and fn&lt;span class=&quot;error&quot;&gt;&amp;#91;eau&amp;#93;&lt;/span&gt;) use the optional argument :tabled after the argument list. Is it ok? &lt;/p&gt;</comment>
                    <comment id="31056" author="dnolen" created="Sun, 5 May 2013 19:39:07 -0500"  >&lt;p&gt;tabling passed as an option is OK with me.&lt;/p&gt;

&lt;p&gt;Also could we get tests? Thanks much!&lt;/p&gt;</comment>
                    <comment id="31057" author="stanislas" created="Mon, 6 May 2013 03:48:23 -0500"  >&lt;p&gt;I&apos;ve used the existing pm tests to test the fne macro. you find it in the logic-80-2.patch. Is it what you had in mind?&lt;/p&gt;

&lt;p&gt;It is not clear how I can test for tabled anonymous functions as the :tabled metadata is of the defn&lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; vars.&lt;br/&gt;
Possibilities would be:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;add meta-data to the function produced by the macro &apos;tabled&apos;;&lt;/li&gt;
	&lt;li&gt;let the function produced by tabled implement some interface/protocol.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;what do you think?&lt;/p&gt;</comment>
                    <comment id="31071" author="dnolen" created="Tue, 7 May 2013 22:31:39 -0500"  >&lt;p&gt;This looks good. Two things:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;squashed patch&lt;/li&gt;
	&lt;li&gt;tabled anonymous goal patch&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="31074" author="stanislas" created="Thu, 9 May 2013 01:38:44 -0500"  >&lt;p&gt;we&apos;re almost there &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;i do not understand what you mean. you prefer a separate patch for tabled anonymous goal?&lt;/p&gt;</comment>
                    <comment id="31075" author="dnolen" created="Thu, 9 May 2013 08:11:59 -0500"  >&lt;p&gt;Sorry typo, I meant a test for the tabled anonymous goal. Thanks!&lt;/p&gt;</comment>
                    <comment id="31077" author="stanislas" created="Fri, 10 May 2013 10:51:01 -0500"  >&lt;p&gt;thanks, i&apos;ll do it asap.&lt;/p&gt;</comment>
                    <comment id="31089" author="stanislas" created="Tue, 14 May 2013 09:50:07 -0500"  >&lt;p&gt;Squashed Patch with tests for the fn&lt;span class=&quot;error&quot;&gt;&amp;#91;e&amp;#93;&lt;/span&gt; macros, normal and tabled.&lt;/p&gt;</comment>
                    <comment id="31090" author="stanislas" created="Tue, 14 May 2013 09:51:37 -0500"  >&lt;p&gt;so i finally got some time to look at it again. the patch is squashed and contains a test for the tabled anonymous goals; it just tests whether the macro code actually works.&lt;/p&gt;</comment>
                    <comment id="31095" author="dnolen" created="Fri, 17 May 2013 00:53:27 -0500"  >&lt;p&gt;Thanks will take a look!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11991" name="logic-80-3.patch" size="6391" author="stanislas" created="Tue, 14 May 2013 09:50:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-70] support for defaults in the simple unifier</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-70</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;There should be a way to specify a logic var with default values. If it is not unified with something it should unify with the default provided value.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15836">LOGIC-70</key>
            <summary>support for defaults in the simple unifier</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 19 Nov 2012 15:19:38 -0600</created>
                <updated>Sun, 17 Mar 2013 18:49:10 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-48] fd/in should provide a default domain if none specified</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-48</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This domain should probably be (interval 0 Long/MAX_VALUE). In order for this to work this means we should probably accept passing in the vars to assigned domains as a seqable. It would be easy to accept the current way and this new way since if the first arg is not a symbol then the new behavior is being requested.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(fd/in [x y])
(fd/in [x y z] (interval 0 10))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15656">LOGIC-48</key>
            <summary>fd/in should provide a default domain if none specified</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Aug 2012 11:35:50 -0500</created>
                <updated>Fri, 17 May 2013 00:57:46 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-44] ex* could expand macros in patterns</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-44</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;So, tagged data structures are probably interesting in a relational context. Say you have a relation with some default logic about dogs:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna friendlyo [Dog-Or-Breed]
    ([:Spot] succeed)
    ([:Spike] fail)
    ([Other-Dog] (fresh [Breed] (dog-breed Other-Dog Breed) (friendlyo Breed)))
    ([(breed :miniature-dachshund)] fail)
    ([(breed :golden-retriever)] succeed)
    ;. . .)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Assume there&apos;s a (defmacro breed &lt;span class=&quot;error&quot;&gt;&amp;#91;t&amp;#93;&lt;/span&gt; `&lt;span class=&quot;error&quot;&gt;&amp;#91;:breed ~t&amp;#93;&lt;/span&gt;).&lt;/p&gt;

&lt;p&gt;That&apos;s nicer than having to drop &lt;span class=&quot;error&quot;&gt;&amp;#91;:breed :golden-retriever&amp;#93;&lt;/span&gt; in there or whatever, since it&apos;s compile-time-checkable, less error-prone, reduces duplication, etc.&lt;/p&gt;

&lt;p&gt;This little patch makes ex* expand macros in patterns so it doesn&apos;t treat e.g. (breed :golden-retriever) as introducing a new LVar called &quot;breed&quot;. Test also provided.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15582">LOGIC-44</key>
            <summary>ex* could expand macros in patterns</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="joeosborn">Joe Osborn</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 19 Jul 2012 16:32:01 -0500</created>
                <updated>Sun, 17 Mar 2013 19:05:17 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28996" author="dnolen" created="Thu, 19 Jul 2012 16:41:30 -0500"  >&lt;p&gt;I&apos;m surprised that this doesn&apos;t already work. We have support for unifying expressions in the pattern already. Look at line 1230 in tests.clj in the master branch.&lt;/p&gt;

&lt;p&gt;So this should just work, no need to explicitly support macros as far as I can tell. If it&apos;s not working, then there&apos;s a bug.&lt;/p&gt;</comment>
                    <comment id="28997" author="joeosborn" created="Thu, 19 Jul 2012 17:18:48 -0500"  >&lt;p&gt;At least on 0.7.5, matching against a macro gives a runtime error:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ClassCastException: clojure.core.logic.LVar cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to clojure.lang.IFn
	at rl.core$glyph_$fn__123$fn__144$fn__165$fn__166$_inc__167$fn__168.invoke(core.clj:61)
	at clojure.core.logic.Substitutions.bind(logic.clj:211)
	at rl.core$glyph_$fn__123$fn__144$fn__165$fn__166$_inc__167.invoke(core.clj:58)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__890$fn__891.invoke(logic.clj:828)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Using a fn instead of a macro gives the same:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ClassCastException: clojure.core.logic.LVar cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to clojure.lang.IFn
	at rl.core$drawable_$fn__235$fn__248$fn__249$_inc__250$fn__251.invoke(core.clj:67)
	at clojure.core.logic.Substitutions.bind(logic.clj:211)
	at rl.core$drawable_$fn__235$fn__248$fn__249$_inc__250.invoke(core.clj:65)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__894$_inc__895.invoke(logic.clj:826)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__890$fn__891.invoke(logic.clj:828)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here&apos;s (glyph-) for reference (don&apos;t mind all the extra [], I have a weird key/value thing because of some conveniences for maintaining fact identity in a temporal database):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna glyph- [Key Val]
	([[Thing] [Glyph]] (thing- [Thing]) (on-fire_ *turn* [Thing]) (== Glyph \&#948;))
	([[Thing] [Glyph]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (glyph- [Type] [Glyph])))
	([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] [Glyph]] (== Glyph \@))
	([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] [Glyph]] (== Glyph \D))
	([[Type] [Glyph]] (== Glyph \?)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and type-enum as a macro:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmacro type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [v] `[:&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :type ~v])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and as a fn:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [v] [:&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :type ~v])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;ll mess around and see if my example works in HEAD.&lt;/p&gt;</comment>
                    <comment id="28998" author="joeosborn" created="Thu, 19 Jul 2012 17:37:36 -0500"  >&lt;p&gt;Same exception with this test case in HEAD (sorry for all the facts):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defrel thing- [Thing])
(defrel type- [Thing] [Type])
(fact thing- [0])
(fact thing- [1])
(fact thing- [2])
(fact type- [0] [:player])
(fact type- [1] [:dragon])
(fact type- [2] [:pig])
(defn type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [t] [:type t])
(defna drawable- [Key]
  ([[Thing]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))
  ([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)]] succeed)
  ([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)]] succeed))

(deftest &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-fns-work
	(is (= (run* [q] (drawable- [q])) &apos;(0 1))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that I look at it, I may be expecting a wrong-format return value, but the point is that I don&apos;t even get that far.&lt;/p&gt;

&lt;p&gt;Using the REPL, I checked out how (defna drawable- . . .) expands (tidied up slightly):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def drawable- (clojure.core/fn ([Key] 
  (clojure.core.logic/conda 
	  ((clojure.core.logic/fresh [Thing] (clojure.core.logic/== [Thing] Key) (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))) 
		((clojure.core.logic/fresh [type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt;] 
		  (clojure.core.logic/== [(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] Key) succeed))
		((clojure.core.logic/fresh [type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt;] 
		  (clojure.core.logic/== [(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] Key) succeed))))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note the (clojure.core.logic/fresh &lt;span class=&quot;error&quot;&gt;&amp;#91;type-enum&amp;#93;&lt;/span&gt; . . .) forms, which are exactly what I would not want to see in this case.&lt;/p&gt;

&lt;p&gt;I&apos;m not really sure why this doesn&apos;t work here yet works for the matche test case.&lt;/p&gt;</comment>
                    <comment id="28999" author="dnolen" created="Thu, 19 Jul 2012 17:47:23 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This pattern make it seem like you want to match:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[[:type :dragon]]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note extra level of brackets here. Is this the case?&lt;/p&gt;

&lt;p&gt;Even so I agree that the expansion doesn&apos;t look quite right. We should never descend into a seq form like that.&lt;/p&gt;</comment>
                    <comment id="29001" author="joeosborn" created="Thu, 19 Jul 2012 17:57:03 -0500"  >&lt;p&gt;Yes, that&apos;s exactly the desired outcome in this case--a tagged value in my naive interpretation. Is the reason it fails whereas the test on :1230 doesn&apos;t the fact that it&apos;s producing a vector and not a list? Changing the fn to return a list instead of a vector didn&apos;t seem to help.&lt;/p&gt;

&lt;p&gt;My patch, fwiw, doesn&apos;t exhibit that behavior (at least for macros, haven&apos;t tested it with fns).&lt;/p&gt;</comment>
                    <comment id="29002" author="dnolen" created="Thu, 19 Jul 2012 21:11:27 -0500"  >&lt;p&gt;What I mean is don&apos;t you want the following instead?&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna drawable- [Key]
  ([[Thing]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))
  ([(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] succeed)
  ([(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] succeed))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that I removed a layer of square brackets.&lt;/p&gt;</comment>
                    <comment id="29005" author="joeosborn" created="Fri, 20 Jul 2012 10:28:39 -0500"  >&lt;p&gt;Nope! I actually want both. I&apos;m doing some temporal logic stuff and I wanted some conveniences for &quot;updating&quot; a fluent, so I wanted to distinguish between the &quot;key part&quot; and the &quot;value part&quot; of the arguments. It looks silly for facts with no &quot;value part&quot;, but it lets me write procedures and fns something like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defrel heldo Time Fluent)
(defrel &#172;heldo Time Fluent)
(declare fluent-obtainedo) ; most recent &apos;held&apos; not terminated by a &apos;&#172;held&apos;, or fail
(defn alter-fluent [Time Rel Key NewVal]
  ;todo: error check, ensure old != &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;, old obtains, &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; does not obtain
  (doseq [old-val (run* [old-val] (fluent-obtainedo Time [Rel Key old-val]))]
    (fact &#172;heldo Time [Rel Key old-val]))
  (fact heldo Time [Rel Key NewVal]))
. . .
(fact heldo 0 [&apos;pos [0] [0 0]])
. . .
(alter-fluent 1 &apos;pos [0] [1 1])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And I write all the non-temporal fluents that way too for consistency and to help prevent mistakes.&lt;/p&gt;</comment>
                    <comment id="29009" author="dnolen" created="Fri, 20 Jul 2012 14:58:13 -0500"  >&lt;p&gt;I&apos;ll try to give a closer look at this issue over the weekend.&lt;/p&gt;</comment>
                    <comment id="30787" author="dnolen" created="Sun, 17 Mar 2013 19:05:17 -0500"  >&lt;p&gt;We&apos;re thinking about a more general solution here: &lt;a href=&quot;http://github.com/clojure/core.logic/wiki/Better-syntax-support&quot;&gt;http://github.com/clojure/core.logic/wiki/Better-syntax-support&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11389" name="exstar-macros.patch" size="1931" author="joeosborn" created="Thu, 19 Jul 2012 16:32:01 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-43] LVar should print readably</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-43</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Currently LVar objects print the same as symbols; they should either print as an unreadable form, or in a way that the reader can read them back in and get an LVar. Attached patch causes them to be read in as LVars.&lt;/p&gt;

&lt;p&gt;However, (read-string (pr-str lv)) does not compare as equal to lv, because the implementation of .equals relies on their string :name objects being identical? - which they will not be, if one LVar was created by the lvar function, which uses str, and the other created by read-string, which uses String/intern.&lt;/p&gt;

&lt;p&gt;It seems plausible to say that LVars can&apos;t be compared for equality after sending them through strings, but that&apos;s awkward and unpleasant. We could instead define LVars to compare their names with = rather than with identical?, but David expressed concern about the performance implications of that change.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15571">LOGIC-43</key>
            <summary>LVar should print readably</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Jul 2012 20:20:40 -0500</created>
                <updated>Thu, 5 Jul 2012 20:20:40 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11369" name="0001-Make-lvar-print-readably.patch" size="992" author="amalloy" created="Thu, 5 Jul 2012 20:20:40 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-35] Core.logic equivalent of multimethods</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-35</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;I need to define predicates to which I can later (and from other namespaces) attach further clauses (so not just facts). I couldn&apos;t find any such functionality in the source. Due to the extensive use of macros, hacking such a system onto core.logic from the outside is extremely difficult, if not impossible (to me at least).&lt;/p&gt;

&lt;p&gt;I&apos;d love to implement this myself too, if given an OK and rough direction.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15314">LOGIC-35</key>
            <summary>Core.logic equivalent of multimethods</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="werg">Gabriel Pickard</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Mon, 2 Apr 2012 19:32:56 -0500</created>
                <updated>Fri, 28 Dec 2012 00:48:09 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28068" author="werg" created="Tue, 3 Apr 2012 18:27:45 -0500"  >&lt;p&gt;I actually did manage to tack on a prototype that covers the basic behavior I would like to see: &lt;a href=&quot;https://github.com/werg/herpderp/blob/master/src/herpderp/multo.clj&quot;&gt;https://github.com/werg/herpderp/blob/master/src/herpderp/multo.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use a set stored in a ref in the defne&apos;s metadata to manage dynamic changes to the clauses. Upon changing that set using defclause I use eval to re-define the var using defne.&lt;/p&gt;

&lt;p&gt;This might not be nice, but allows me to continue developing features against it.&lt;/p&gt;</comment>
                    <comment id="30334" author="dnolen" created="Fri, 28 Dec 2012 00:48:02 -0600"  >&lt;p&gt;I don&apos;t think the current implementation can really support this and I don&apos;t think it&apos;s wise to try to hack around the current implementation. I&apos;d be willing to consider a comprehensive solution if someone is willing to do the legwork.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-28] defrel cannot be called inside function</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-28</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15224">LOGIC-28</key>
            <summary>defrel cannot be called inside function</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Feb 2012 15:20:17 -0600</created>
                <updated>Sun, 17 Mar 2013 18:55:08 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27779" author="dnolen" created="Mon, 20 Feb 2012 14:15:21 -0600"  >&lt;p&gt;Can you reformat the patch w/ git so it has the proper attribution information? Thanks!&lt;/p&gt;</comment>
                    <comment id="28490" author="jasonjckn" created="Sun, 13 May 2012 10:06:40 -0500"  >&lt;p&gt;New patch with attribution info. Sorry about super long turn around time, in the future I should be much faster. &lt;/p&gt;</comment>
                    <comment id="29504" author="martintrojer" created="Thu, 20 Sep 2012 03:32:40 -0500"  >&lt;p&gt;This patch solved the exact same problem for me aswell.&lt;/p&gt;

&lt;p&gt;Cheers...&lt;/p&gt;</comment>
                    <comment id="29505" author="dnolen" created="Thu, 20 Sep 2012 10:57:07 -0500"  >&lt;p&gt;I&apos;ve yet to hear a good rationale for this patch. defrel has the same semantics as def and should only exist at the top level. If someone puts more though into what defining a rel dynamically should look like I will consider it.&lt;/p&gt;</comment>
                    <comment id="29507" author="jasonjckn" created="Thu, 20 Sep 2012 14:02:02 -0500"  >&lt;p&gt;I only implemented this so I could delete relation state. There&apos;s probably a better way to do this though. &lt;/p&gt;</comment>
                    <comment id="29508" author="martintrojer" created="Fri, 21 Sep 2012 02:47:35 -0500"  >&lt;p&gt;Indeed, a make-rel function would be optimal, then you can def it (or store it somewhere else) at your leisure.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11212" name="0001-allow-defrel-to-be-called-from-within-a-function-if-.patch" size="2575" author="jasonjckn" created="Sun, 13 May 2012 10:06:40 -0500" />
                    <attachment id="10912" name="patch-defrel" size="1521" author="jasonjckn" created="Wed, 15 Feb 2012 15:20:17 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-26] Generate a better error when adding facts for arities that do not exist</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-26</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15146">LOGIC-26</key>
            <summary>Generate a better error when adding facts for arities that do not exist</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 23 Jan 2012 22:33:16 -0600</created>
                <updated>Sun, 17 Mar 2013 18:54:33 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-96] relevant-var? logic incorrectly discards a vars constraint set</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-96</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Need a patch and a test showing that the vars constraint set is preserved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15942">LOGIC-96</key>
            <summary>relevant-var? logic incorrectly discards a vars constraint set</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Jan 2013 11:01:00 -0600</created>
                <updated>Sun, 17 Mar 2013 19:10:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30404" author="dnolen" created="Mon, 7 Jan 2013 19:04:59 -0600"  >&lt;p&gt;Currently dead code so this is not a blocker.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>
</channel>
</rss>