[cl-unification-devel] a simpler example

Russell McManus russell_mcmanus at yahoo.com
Wed Jun 11 19:10:16 UTC 2008


I tried the attached version, and the problem persists.

Thanks for looking into it,
-russ

----- Original Message ----
> From: Marco Antoniotti <marcoxa at cs.nyu.edu>
> To: cl-unification-devel at common-lisp.net
> Cc: Russell McManus <russell_mcmanus at yahoo.com>
> Sent: Wednesday, June 11, 2008 11:02:56 AM
> Subject: Re: [cl-unification-devel] a simpler example
> 
> There may be a misalignment with my version (which works on LW) and  
> the CVS version,  or it may be a problem which SBCL raises due to its  
> version (more strict) of MAKE-LOAD-FORM.
> 
> I'll look into it.
> 
> Thanks for raising the issue.
> 
> Meanwhile try the version attached on SBCL.
> 
> Cheers
> --
> Marco
> 
> 
> 
> 
> 
> 
> On Jun 11, 2008, at 16:04 , Russell McManus wrote:
> 
> > I'm pretty sure that I tried repeating the #T before sending my  
> > first email, but it failed with an error.
> >
> > I just tried again on sbcl 1.0.10.16 and got the following:
> >
> > (unify #T(list ?f #T(list ?s1 ?s2)) '(a (b c)))
> >
> >
> > Cannot unify two different symbols: B MAKE-TEMPLATE.
> >    [Condition of type CL.EXT.DACF.UNIFICATION::UNIFICATION-FAILURE]
> >
> > Restarts:
> >  0: [ABORT] Return to SLIME's top level.
> >  1: [TERMINATE-THREAD] Terminate this thread (#
> > "worker" {1008AB0C91}>)
> >
> > Any ideas what I should try next?
> >
> > -russ
> >
> >
> >
> > ----- Original Message ----
> >> From: Marco Antoniotti 
> >> To: cl-unification-devel at common-lisp.net
> >> Sent: Tuesday, June 10, 2008 3:51:44 AM
> >> Subject: Re: [cl-unification-devel] a simpler example
> >>
> >>
> >> On Jun 6, 2008, at 24:38 , Russell McManus wrote:
> >>
> >>>
> >>> Here are some examples:
> >>>
> >>> ;; this works
> >>> (find-variable-value
> >>>  '?s
> >>>  (unify #T(list ?f ?s) '(a (b c))))
> >>
> >> Yes.
> >>
> >>>
> >>> ;; this works
> >>> (find-variable-value
> >>>  '?s1
> >>>  (unify #T(list ?f (?s1 ?s2)) '(a (b c))))
> >>
> >> Yes.
> >>
> >>
> >>>
> >>> ;; this fails
> >>> (find-variable-value
> >>>  '?s1
> >>>  (unify #T(list ?f (list ?s1 ?s2)) '(a (b c))))
> >>
> >> As it should.  What you want is
> >>
> >> (unify #T(list ?f #T(list ?s1 ?s2)) '(a (b c)))
> >>
> >> In your case you are trying to unify a template of type LIST with a
> >> variable in FIRST and a list (LIST ?s1 ?s2) in SECOND.  The second
> >> element cannot unify with (B C), hence the failure.
> >>
> >>>
> >>> I was expecting the meaning of LIST to be the same whether
> >>> it is encountered at top level in a template, or at a nested level.
> >>>
> >>> Is this a bug, or are my expectations wrong?
> >>
> >> Sorry.  It is your expectations.  If you look at the most general
> >> syntax for templates, you will see that it is #T(.
> >> ).  This is because it would be a nightmare to do otherwise.
> >>
> >>
> >> Suppose you have a
> >>
> >> (unify #T(list 42 (foo)) (list 42 (list 'foo)))
> >>
> >> should unify.  But is next you do
> >>
> >> (defstruct foo a s d)
> >>
> >> then
> >>
> >> (unify #T(list 42 (foo)) (list 42 (list 'foo)))
> >>
> >> may or may not unify pending interpretation.
> >>
> >> Hope this clarifies things.  Let me know if there are other pitfalls
> >> or bugs in the code.
> >>
> >> Cheers
> >>
> >> Marco
> >>
> >>
> >>>
> >>
> >> --
> >> Marco Antoniotti
> >>
> >>
> >> _______________________________________________
> >> cl-unification-devel site list
> >> cl-unification-devel at common-lisp.net
> >> http://common-lisp.net/mailman/listinfo/cl-unification-devel
> >
> 
> --
> Marco Antoniotti




More information about the cl-unification-devel mailing list