Mathematica daily WTF (101221T)
- To: mathgroup at smc.vnet.net
- Subject: [mg114897] Mathematica daily WTF (101221T)
- From: kj <no.email at please.post>
- Date: Wed, 22 Dec 2010 02:34:25 -0500 (EST)
Today's daily wonder comes from an innocent attempt to define a home-grown version of Sequence: In[1]:= sequence /: w_[x___, sequence[y___], z___] := w[x, y, z]; It seems to work: In[2]:= foo[1, 2, sequence[3, 4, 5], 6, 7] === foo[1, 2, Sequence[3, 4, 5], 6, 7] Out[2]= True But, when evaluated by itself, it causes the Mathematica output procedure to spill its guts in a most undignified fashion: In[3]:= sequence[3, 4, 5] During evaluation of In[3]:= If::argb: If called with 8 arguments; between 2 and 4 arguments are expected. >> Out[3]= If[False, 3, 4, 5, With[{OutputSizeLimit`Dump`boxes$ = Block[{$RecursionLimit = Typeset`$RecursionLimit}, MakeBoxes[sequence[3, 4, 5], StandardForm]]}, OutputSizeLimit`Dump`loadSizeCountRules[]; If[TrueQ[BoxForm`SizeCount[OutputSizeLimit`Dump`boxes$, 1048576]], OutputSizeLimit`Dump`boxes$, OutputSizeLimit`Dump`encapsulateOutput[ sequence[3, 4, 5], $Line, $SessionID, 5]]], 3, 4, 5] Ironically, the idea for trying out this self-rolled implementation of sequence as a "universal up-value" comes from a passing remark by Robby Villegas in an article (http://is.gd/j8V9f) where he introduces such "universal up-values" as an example for why MakeBoxes (see Out[3] above) needs to be so "nasty". Point taken, but clearly, there's a leak, at least in version 7. (I hope that someone at Wolfram is making note of reports like this one, since, as far as I can tell, there's no public bug report page for Mathematica.) ~kj
- Follow-Ups:
- Re: Mathematica daily WTF (101221T)
- From: Leonid Shifrin <lshifr@gmail.com>
- Re: Mathematica daily WTF (101221T)