Re: Options[] creation

• To: mathgroup at smc.vnet.net
• Subject: [mg39235] Re: Options[] creation
• From: "Allan Hayes" <hay at haystack.demon.co.uk>
• Date: Wed, 5 Feb 2003 00:11:03 -0500 (EST)
• References: <b1nq2h\$o3o\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Kyriakos,

Here is are two ways (but adding message can often take longer than the
original programming - much depends how much you want  to do).  In general
we want to model built in function behaviour by returning univaluated when
something goes wrong.

(1)
Options[f]:=
{Diameter->1,Shape-> Circle};

f[x_, opts___?OptionQ]:=
Module[{shp, diam},
{shp,diam}= {Shape,Diameter}/.
Flatten[{opts}]/.Options[f];
If[
MatchQ[{shp,diam},
{Circle,_?Positive}|{Ellipsis,{_?Positive,_?Positive}}],
program[x,opts],
Message[f::bdshpdiam]
]]

Define the message.

f::bdshpdiam= "The values of the options Shape and Diameter
incompatible.";

TEST.

f[aa]

program[aa]

f[aa, Diameter->{2,3}]

f::bdshpdiam: The values of the options Shape and Diameter
incompatible.

(2)

Here is an example of a flexible trechnique that allows us to monitor the
evaluation process and act on what happens.

middle[x___]:=With[{result=middle1[x]},result/;result=!=\$Failed]

We now test all aspects of the input and on-going evaluation and act on what
we find.

middle1[x___]:=
Module[{tag},
Catch[If[
Length[{x}]===1,
If[OddQ[Length[x]],Throw[x[[Ceiling[Length[x]/2]]],tag],
Message[middle::nodd];Throw[\$Failed, tag]],
Message[middle::argx,middle, Length[{x}]];Throw[\$Failed,tag]
],
tag]
]

middle::nodd =
"The argument of middle is expected to be normal with an odd number
of elements";

TEST

middle[{1,2}]

middle::nodd: The argument of middle is expected to be normal with
an odd \
number of elements

middle[{1,2}]

middle[1,2]

middle::argx: middle called with 2 arguments; 1 argument is
expected.

middle[1,2]

middle[p[1,2,3]]

2

--
Allan

---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565

"Kyriakos Chourdakis" <k.chourdakis at qmul.ac.uk> wrote in message
news:b1nq2h\$o3o\$1 at smc.vnet.net...
> Dear all,
>
> Suppose I create a function f[x_,opts___]
> with options
> Shape in {Circle,  Ellipsis} and Diameter in R+, DiameterLong in R+,
> DiameterShort in R+
> Say that the defaults are
> Options[x]={Shape->Circle, Diameter->1.}
>
> The option Diameter makes sence only when Shape->Circle, and
> The options DiameterShort/Long make sense only when Shape->Ellipsis
>
> Is there a quick way to tell Mathematica to warn if these conditions are
> not satisfied? I could write a series of boolean tests, but I was
wondering
> if there is a more elegant way.
>
> Best,
>
> Kyriakos
>
>
>
> _____+*"*+____+*"*+___+*"*+__+*"*+_
>
> Kyriakos Chourdakis
> Lecturer in Financial Economics
>
> URL: http://www.qmw.ac.uk/~te9001
> tel: (++44) (+20) 7882 5086
> Dept of Economics
> University of London, QM
> London E1 4NS
> U.K.
>

```

• Prev by Date: RE: Defining and Programming Graphical Directives
• Next by Date: Re: Defining and Programming Graphical Directives
• Previous by thread: Options[] creation
• Next by thread: Re: Options[] creation