Re: Assertions in Mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg113458] Re: Assertions in Mathematica?
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Fri, 29 Oct 2010 06:29:47 -0400 (EDT)
- References: <email@example.com>
Hi, > Naively, I tried defining: > > Assert[exp_, msg__] := If[!exp, Message[msg]; Abort] > > ....which, of course, failed to work (as I've learned to expect); > instead it produced a cryptic error "Message::name : Message name > .... is not of the form symbol::name or symbol::name::language." > But hope springs eternal! If someone is kind enough to tell me > how I could implement my Assert, I'd be most grateful. I guess this would be doing what you intended: SetAttributes[assert, HoldAll] assert[exp_, msg__] := If[! exp, Message[msg]; Abort] test::error = "value is negative!" x = -1; assert[x > 0, test::error] > If someone > can tell me how I could have arrived at this answer by myself by > consulting the documentation, I'd be ecstatic. my impression is that all you were missing was the HoldAll attribute for the assert function. My personal experience is that frustration with the documentation and the behaviour of Mathematica has reduced a lot for me at the point when I started to understand the details of how the evaluation process works. It is one of the subtleties that many users try to avoid to learn since it seems to not be crucial to their tasks at hand. On the other hand, it is the one clue to most of the mathematica oddities so I think even if you are an on and off user, you would gain a lot from understanding it. The tutorials listed in the guide/EvaluationControl documentation page seem to be a good starting point, actually I think they contain all the information needed. I found many of the tutorials in the documentation be a valuable source of information, so if I am not looking for the details of a known function I usually look for tutorials. In version 7 the virtual book gives an overview of the existing tutorials, you can find even some more relevant tutorials there in the section Core Language -> Evaluation of Expressions. hth, albert