MathGroup Archive 2010

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

Search the Archive

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




  • Prev by Date: Re: Assertions in Mathematica?
  • Next by Date: Re: Documentation of Return is a little confusing?
  • Previous by thread: Re: Assertions in Mathematica?
  • Next by thread: Re: Assertions in Mathematica?