Re: Unprotect[] Protect[] redefining builtin but keep original available
- To: mathgroup at smc.vnet.net
- Subject: [mg131567] Re: Unprotect[] Protect[] redefining builtin but keep original available
- From: Chris Osborn <chrisosb at gmail.com>
- Date: Tue, 3 Sep 2013 02:25:24 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <kucorf$a47$1@smc.vnet.net>
Hi Robert, Yes, this is possible. One solution is: 1. Create a conditional rule for the built-in symbol you would like to override, where the condition simply checks the value of some "override" symbol of your choosing. This allows you to effectively enable/disable the rule by setting the "override" symbol to True/False. 2. Globally, set the value of the "override" symbol to True, so that your rule will be in effect. 3. But, in the *body* of your rule, use a Block to locally set the value of the "override" symbol to False. Everything that executes within the body of the Block will ignore the rule, and the built-in symbol will have its default behavior. Here is an example: override = True; Unprotect[Solve]; Solve[args___] /; override := Block[{override = False}, Row[{"Here is my solution: ", Solve[args]}] ]; Protect[Solve]; Solve[2 x + 4 == 13, x] Chris On Tuesday, August 13, 2013 12:56:31 AM UTC-7, roby wrote: > Dear Group > > > > Is it in general possible to redefine mathematica builtins but still call the original function from within (but not only from there) the redefinition ? > > > > In particular I would like to overload a builtin (distinguished by an additional Option additionalopt->o) and keep the possibility to call the original (distinguished by omitting the additional Option or > > by setting additionalopt->None) > > > > Regards Robert