Hello,

I have found 'devaluate' in some Spad files and it can be handy. Some
domains are parameterized and it is not possible, or at least I don't
know how to do it, to use ' is ' instead of ' has ' (Domain vs.
Category) for them:

if R is Foo then
    new(n) == bar(n)
else
   new...

it is not possible to use:
if Foo(p) then

Or like #1 in "SubDomain(Integer, #1 >= 0)" used for NonNegativeInteger?

I don't know how. So I use 'devaluate' and a 'has' after the 'is', in
fact '=' here, see the string below, to let me gather information
about the domain, size(), precision() etc. (the parameters) via the
exported operations of the parent category. Think of ZMOD in a
container as an example.

But, this is not my question, sometimes using 'devaluate' breaks
completely the code after, it's still compilable but not executable.
Any ideas why?
R is a Ring.
===== spad ===============
        NRing :String := string CAR((devaluate(R)$Lisp))$Lisp

        Rep := SExpression
        pprint := true

        getind(m)  ==> concat(["getindex(", "refs,_"", jlId m, "_")"])
=====
And later, the above macro is incorrectly treated (jlId is defined in
a category, and call the JLREFID *method*):

   >> System error:
   There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION BOOT::JLREFID (1)>
when called with arguments
  (|NemoIntegerMod|).
See also:
  The ANSI Standard, Section 7.6.6


A work around is:
================================================
        NRing := CAR((devaluate(R)$Lisp))$Lisp pretend String
        --NRing :String := string CAR((devaluate(R)$Lisp))$Lisp

        Rep := SExpression
        pprint := true

        getind(m)  ==> concat(["getindex(", "refs,_"", jlId m, "_")"])
================================================

And all becomes right... I have already encountered this issue before
but never found where it came from, now, yes!
And even a workaround. Before, I think it was adding some code between
the 'devaluate' and the macro that did the job.

- Greg

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/fricas-devel/CAHnU2da3myvhA8swYtuZb3k2cYTxUWkYgMjk0jjP%2BCc1oTLHVw%40mail.gmail.com.

Reply via email to