Re: Serious bug in MatchQ causes crashes and incorrect results
- To: mathgroup at smc.vnet.net
- Subject: [mg28213] Re: Serious bug in MatchQ causes crashes and incorrect results
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Thu, 5 Apr 2001 03:00:28 -0400 (EDT)
- Organization: Universitaet Leipzig
- References: <9aem2g$nc6@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, you call Abort[] and you are wondering *why* the system crash. Whow ... I have a similar problem on my PC, every time I press the key with the "Reset" label to terminate a program the computer reboots and all my data are lost. Abort[] kill your full computation in a very hard way, you should use something like Break[] or Return[] to hinder the Kernel to continue its computation. In harder cases you may try a Catch[]/Throw[] pair. But never, *never*, NEVER, N_E_V_E_R use Abort[] Since Abort[] is so brutal it is very likely that a wonderfull stable system like MacOS crashes ... BTW: I expect that the whole function is nonsense because FileNames[] *can* only return a list of strings or an empty list, both should match {_String...}. So it is useless to test it. And it always better and more clear to have a rules getFile[file_]:= getFile[file_,{}]:= getFile[file_,dirs:{_String..}]:= Regards Jens Jeff DuMonthier wrote: > > I recently posted a question in this group asking how I could do complex > pattern matching and default arguments in function (delayed set) > definitions. The best way seemed to be to use the argument list > definition for the defaults and MatchQ in the body to check arguments. > This is an example of what I was doing: > > getFile[dirs_:{},file_]:=Module[{ vars... }, > > If[! MatchQ[dirs,{_String...}], Message[getFile::err1];Abort[] ]; > > ... > ]; > > Although my test cases worked, when I tried to actually use the code I > encountered serious problems. > > Running version 4.0.1 for Macintosh (OS 9.1) I started experiencing > frequent system crashes (freezing). Usually this would occur while one > of these functions was being executed. Once it froze when closing the > help browser. I edited just the MatchQ expressions out of the code and > it ran with no problems. > > Running version 3.0 under Solaris the MatchQ conditions did not always > return the correct results. For example, the code fragment above would > usually but not always abort on the check shown, even when the first > argument was a list containing one or more strings, i.e. {"aaa"}. > > This is the first case I have found (without using Mathlink) where > Mathematica crashes or returns erroneous and inconsistent results rather > than cryptic error messages. > > -Jeff > DuMonthier