Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Module (and its dynamical scoping cousin Block) can be clunky to use because you have to declare the local variables you wish to use up-front. Other than that it's not 'weird'.

I write a lot of Mathematica code for my job. To make life easier I've built in a macro system that makes day-to-day programming a whole lot more pleasant. It will be available in Mathematica 10.4 in the GeneralUtilities package that ships with Mathematica.

One of the built-in macros is a construct that automatically localizes any variables that occur as the L-value of an assignment:

  Needs["GeneralUtilities`"]
  foo[x_, y_] := Scope[
    z = x * y;
    PrimeQ[z + 1]
  ]
This gets rewritten at definition time to be:

  foo[x_, y_] := Block[{z},
    z = x * y;
    PrimeQ[z + 1]
  ]
It's a small thing, but it adds up, especially for large functions, and indeed its silly this isn't a core feature of the language.

There are a couple other nice features of Scope, too, like the ability to use a single quote ' anywhere in the body of your function to Echo the value there to the current notebook without actually changing the behavior of the code -- essentially a very lightweight form of 'debugging print'. That also makes a huge difference.

And it has some more powerful variants, like "z '= 2 * 3" will echo a line that explicitly says "z = 6", rather than just "6".

Likewise '' means EchoHold, which prints the expression before being evaluated AND afterwards, so you'll see "z = 2 * 3 = 6" in the above case.

Lastly ''' means Tap, which is a higher-order form of EchoHold which instruments a function to echo its input and output (again without changing behavior). So Fold[Plus''', Range[10]] prints out all the intermediate steps in the fold.

There's a variety of features that add a very lightweight syntax for monadic and exception-based error handling, but that's not quite stable enough to advertise yet.

Same goes for debugging: there's some really powerful stack browsing, history capture and replay features, but again not quite stable enough to advertise for this version.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: