I was hacking around with core.logic, trying to implement a "bind var in 
sub process".

So that this this succeeds:
(run [q] 
   (fresh[a]
      (runsub [q]                   ;; will "export 'q" or "bind 'q in 
caller context"
            [(== a 1) (== q 1)]) ;; 'a will be bound only inside this 
context 
      (lvaro a)))                     ;; 'a is not bind in caller context
(1)

I didn't want to do term replacement, so i figure i could run goals an 
return the original substitution.
(fn[a]
    (let[ a' (take* (reduce bind a goals))]
        (magic-happens q a' a) ;; generate an mplus binding lvar q with a' 
values inside a.
)

Anyway :D haha.

I found that, take* throws an exception because 

> (let [x  (lvar) 
                  as (tramp (-> empty-s
                                     ((conde [(== x 1)]
                                                  [(== x 2)]))))
                  ls (take* as)]
              ls)
(#object[clojure.core.logic.Substitutions 0x7c509c4b "{<lvar:28932> 
1}"]*AbstractMethodError 
  clojure.lang.RT.seqFrom (RT.java:533)*
> 

It happens because :
(deftype Substitutions 
  ....
  ITake
  (take* [ this ]  this) ;; why not seqable? 

Seems easy to fix, but i bet there be code depending on return not being a 
seqable.
  (take* [ this ]  [this]) 

Bye.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to