Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to short-circuit match failure?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg114477] Re: How to short-circuit match failure?
  • From: kj <no.email at please.post>
  • Date: Sun, 5 Dec 2010 21:53:00 -0500 (EST)
  • References: <id7t63$lc6$1@smc.vnet.net>


My previous post proposed this definition:

> In[16]:= 
> ...
>
> Module[{chkargs, core},
>  foo[args___] := (
>    chkargs[x_List /; Length[x] < 3, y_] := True;
>    chkargs[_List, _] := Message[foo::toolong];
>    chkargs[_, _] := Message[foo::nolist];
>    chkargs[x___] := Message[foo::nargs, Length[{x}]];
>    core[x_, y_] := {#, y} & /@ x;
>    core[args] /; chkargs[args])
>  ]

Sorry, that's grossly inefficient.  There's no need to reset
chkargs and core every time foo is evaluated.  This is more
reasonable:

In[16]:= 
...

Module[{chkargs, core},
 chkargs[x_List /; Length[x] < 3, y_] := True;
 chkargs[_List, _] := Message[foo::toolong];
 chkargs[_, _] := Message[foo::nolist];
 chkargs[x___] := Message[foo::nargs, Length[{x}]];
 core[x_, y_] := {#, y} & /@ x;

 foo[args___ /; chkargs[args]] := core[args];
]

~kj


  • Prev by Date: Re: How to use "Apply" to do differentiation ?
  • Next by Date: Re: How to bring up specific doc page programmatically?
  • Previous by thread: Re: How to short-circuit match failure?
  • Next by thread: Re: How to short-circuit match failure?