El viernes, 19 de septiembre de 2014 09:26:09 UTC-5, David P. Sanders 
escribió:
>
>
>
> El viernes, 19 de septiembre de 2014 08:58:56 UTC-5, Isaiah escribió:
>>
>> To do what you want, very briefly:
>>
>> > x.args[3] == :pi && x.args[3] = Expr(:call, :BigFloat, :pi)
>>
>> This will make more sense if you look at `xdump` output to see how Exprs 
>> are structured
>> (and `xdump` is quite handy to know about in general). Try:
>>
>>
>> > xdump(:(big(3) + big(pi)))
>> ...
>>
>>
> Yes, that's what I need, thanks. Now I need to iterate over the (in 
> principle arbitrarily complex, i.e. nested) syntax tree and do this 
> everywhere. 
> Is there a standard method for this kind of iteration?
>

I guess some kind of recursion. I'll give it a go...

 

>  
>
>>
>> On Fri, Sep 19, 2014 at 9:42 AM, David P. Sanders <dpsa...@gmail.com> 
>> wrote:
>>
>>>
>>>
>>> El viernes, 19 de septiembre de 2014 08:34:05 UTC-5, David P. Sanders 
>>> escribió:
>>>>
>>>> Hi, for a package I'm writing (or, more precisely, trying to write), I 
>>>> need to do the following:
>>>>
>>>> Change `:(3 + pi)` 
>>>> into `:(3 + big(pi))`  
>>>> or `:(BigFloat(3) + BigFloat(pi))`
>>>>
>>>
>>> I forgot to say that I need to do this so that I can perform the 
>>> calculations with different rounding modes.
>>>  
>>>
>>>>
>>>> Basically I need to apply `BigFloat` to every symbol in the expression. 
>>>> (I believe that it would be sufficient to wrap `MathConst`s in `big`, but 
>>>> converting everything to BigFloat is probably a good idea.)
>>>>
>>>> This is my first foray into parsing etc. I'm guessing there's a package 
>>>> that allows me to do this easily -- could someone please point it out?
>>>> Or how should I go about this?
>>>>
>>>> In principle the expressions could be more complicated, e.g.  `(3 + pi) 
>>>> * (2.5 - e)`
>>>>
>>>> Thanks,
>>>> David.
>>>>
>>>
>>

Reply via email to