Re: Assertions in Mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg113454] Re: Assertions in Mathematica?
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Fri, 29 Oct 2010 06:29:00 -0400 (EDT)
You are having problems with Message; so look it up in the documentation or type ??Message This indicates that the syntax for the argument is symbol::tag You did not use this syntax, so Mathematica issued a message telling you exactly that. You can either reuse an existing message or define your own as shown in the More Information section of the documentation for Message. In this case, you apparently want to dynamically define the message. Consequently, you must embed the Message definition in the definition of assert. Clear[assert] assert[exp_, msg_] := ( assert::testf = msg; If[! exp, Message[assert::testf]; Abort]) (assert[True, "test message for assert"]; 25) 25 (assert[False, "test message for assert"]; 25) assert::testf: test message for assert $Aborted (assert[False, "a different test message for assert"]; 25) assert::testf: a different test message for assert $Aborted If you start from the assumption that the documentation is worthless, then you will probably not be able to use it effectively. If you assume that the answer is there, then you will generally--but not always--find it or be able to discover it with some simple experimentation. Bob Hanlon ---- kj <no.email at please.post> wrote: ============= What's the best to implement assertions in Mathematica? By assertions I mean statements like assert(exp) in C, which generate an error if exp evaluates to false. This *should* be trivial, but it's Mathematica, so... 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." I tried many other things, but after wasting 1 hour on this ridiculously trivial programming task, I'm reduced to begging for help. (This, by the way, is always the way it is with me and Mathematica, and I've been using it on-and-off for almost 20 years. The documentation is as useless to me today as it was 20 years ago. I find it as horrible as the rest of Mathematica is brilliant.) I've posted desperate questions over programming mind-numbing trivialities like this one in Mathematica before, i.e. questions that seem so elementary and fundamental that no one who has access to the documentation and who can read should *ever* have to ask them. I ask them less wanting to get the answer to the questions themselves than hoping to learn how I could have answered such questions by myself. But I've never found how to do this. Those who know the answers *already* can give them to me if they feel so inclined. (And how they got to know the answer to begin with, I don't know; I imagine it took years of sustained Mathematica programming. Or maybe they asked a similar question before to someone who already knew the answer...) But no one has been able to tell me how someone who *doesn't* know the answers to such questions already can figure it out without outside help. But hope springs eternal! If someone is kind enough to tell me how I could implement my Assert, I'd be most grateful. If someone can tell me how I could have arrived at this answer by myself by consulting the documentation, I'd be ecstatic. TIA, kj