
Re: Assertions in Mathematica?
Posted:
Oct 30, 2010 4:36 AM


Use:
Attributes[Assert] = {HoldAll}; Assert[exp_, msg_] := If[Not[exp], Message[Unevaluated[msg]]; Abort[];]
You also might want to consider adding arguments for some messages, e.g.:
Assert[exp_, msg_, args___] := If[Not[exp], Message[Unevaluated[msg],args]; Abort[];]
And you might also want to consider what happens if "exp" does not evaluate and remains in symbolic form, e.g.:
Assert[exp_, msg_,args___] := If[exp =!= True, Message[Unevaluated[msg],args]; Abort[];]
>> 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 onandoff 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 mindnumbing >> 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

