Re: Add syntax highlighting to own command
- To: mathgroup at smc.vnet.net
- Subject: [mg101652] Re: Add syntax highlighting to own command
- From: Daniel <janzon at gmail.com>
- Date: Sun, 12 Jul 2009 06:57:24 -0400 (EDT)
- References: <h340tk$guu$1@smc.vnet.net>
Hello Bastian,
I'm certainly unable to make the construct better, but I can show how
I would do it. I'm also fairly new to Mathematica, so don't use my
code in automated brain surgery...
mywith[{}, expr_] := expr
mywith[{head_, tail___}, expr_] := With[{head}, mywith[{tail}, expr]]
SetAttributes[mywith, HoldAll]
Test:
(* Input *)
mywith[{a = "Hi, ", b = a <> "there"}, Print[b]]
mywith[{a = 1, b = a + 1, c = b + 1, d = a + b + c}, {a, b, c, d}]
(*Output*)
Hi, there
{1, 2, 3, 6}
Do our solutions differ in behavior? I wouldn't be surprised at all if
our codes behaved differently in the details.
All the best,
Daniel Janzon
On Jul 9, 7:58 am, earth... at web.de (Bastian Erdnuess) wrote:
> I was missing a scoping construct like 'With' but where the local
> variables get assigned linearly. E. g.
>
> In[1] := LinearWith[ {
> a = "Hi, ",
> b = a <> "there!" },
> Print[ b ] ]
>
> Out[1] = "Hi, there!" .
>
> I'm fairly new to Mathematica, but I know some Lisp, and somehow I got
> it. I called my new construct Let and defined it as:
>
> Let[ vars_, expr_ ] :=
> If[ Length[ Unevaluated[ vars ] ] == 1,
> With[ vars, expr ],
> (* else *)
> Unevaluated[ vars ] /.
> { a_, b__ } :>
> With[ { a },
> Let[ { b }, expr ] ] ]
>
> SetAttributes[ Let, HoldAll ]
>
> It seems to work fine so far.
>
> Now, I would like to have this construct load always when I start
> Mathematica and I don't want to get it cleared when I use
> 'Clear["Global`*"]'. So I put it in the System` context and also added
> the attribute 'Protected'. I wrote all in a file Let.m and now, I
> wonder where to put it that it gets read automatically at each startup
> of Mathematica.
>
> However, my first question: Is it a bad idea to add things to the
> System` context? And if not, where to put my file? And if, what wou=
ld
> be better?
>
> Second, my main question: Is it somehow possible to add this nice syntax
> highlighting to the Let construct like with the With construct, where
> the local variables appear in green?
>
> Third: Can I somehow add a help page? I have already the Let::usage.
>
> And last: Does anybody know how to make the construct better? Is there
> something like syntax transformation rules in Mathematica?
>
> Thank you for your answers,
> Bastian