Re: Adding options to built-in functions
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg793] Re: [mg697] Adding options to built-in functions
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Sat, 15 Apr 95 15:25:26 GMT
Jack Goldberg wrote, ([mg697] Adding options to built-in functions) >I would like to add an option to PowerExpand >called InverseTrig->False. This option, when evoked >would reduce > ArcTan[Tan[x]] to x >and similarly for the other inverse trigs composed >with the trigs. >What is the preferred way to introduce your >own option to a built in command? Indeed, >is it even possible? and if possible, desirable? Here is one way of dealing with PowerExpand In[1]:= Unprotect[PowerExpand]; Options[PowerExpand] = {LocalInverse ->False}; pe[g_[f_[x_]]]/;Expand[g-InverseFunction[f]]===0:= x; pe[expr_] := PowerExpand[expr]; PowerExpand[expr_, LocalInverse -> True]:= MapAll[pe, expr, Heads->True]; (*PowerExpand behaves like this*) PowerExpand[expr_, LocalInverse -> False]:= PowerExpand[expr]; Protect[PowerExpand]; Tests In[9]:= PowerExpand[{{ArcSin[Sin[x]]}}[Log[Sqrt[x^2]]]] Out[9]= {{ArcSin[Sin[x]]}}[Log[x]] In[10]:= PowerExpand[{{ArcSin[Sin[x]]}}[Log[Sqrt[x^2]]], LocalInverse -> True ] Out[10]= {{x}}[Log[x]] A general approach might be something like Unprotect[foo] foo[x___, opts__?OptionQ]/; MemberQ[ First/@Flatten[{opts}], Alternatives@@(First/@Flatten[{newoptions})] ] := ExtraDefinitions Protect[foo] But, as with PowerExpand, there may be particular feature that can help or that have to be taken into account (no existing options, MapAll behaviour). Since the new behaviour has to be triggered by the new option I guess that it is fairly safe -- but someone might just use Options[foo] in their coding. Allan Hayes hay at haystack.demon.co.uk