[racket-dev] highlighting function position with an underline.

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Tue Oct 26 03:35:35 EDT 2010

John Clements wrote at 10/26/2010 02:33 AM:
> Who thinks it would be helpful, though, if Check Syntax were to, say, underline the function position?

Not for the non-beginner languages, please.

> After thinking about it for a while, I'm currently of the opinion that one serious shortcoming of our syntax is that we fail to distinguish the function position from that of the arguments, something that the traditional f(x) notation does pretty clearly.

FWIW, when I was first learning non-Scheme Lisps, I visualized the 
function name as part of the parentheses pair.  So, this is atomic 
syntax for the application of function "myfunc":

    (myfunc                  )

With some background between the parens, and elastic to accommodate 
arguments, and with the name permanently fixed as part of the left 
paren.  Perhaps the "(myfunc" and its ")" are die-cast metal tags on the 
ends of a piece of elastic or on parts of a slide rule, though I never 
thought of it quite that concretely.  To reinforce: the ")" are like 
little handles on the very ends that you can pull and push, and they 
mark the very ends, too.

When I moved to Scheme, I gave up this fairly physical notion of the 
syntax, since clearly it would discourage me from thinking about 
procedures as first-class objects, which Scheme seemed to consider 

However, if new students are somehow confused by this syntax, and you 
want to teach the noble lie that procedures always have names, and 
therefore that students could use the more physical/visual notion of the 
syntax that always has parentheses... I suggest that the first thing to 
do is to make the color of the parentheses pair match the color of the 
procedure name.

Hand-wavey cog-sci: By making parens a different color, as DrRacket 
does, they are more a different thing than the procedure name things, 
and then we have to think more about their semantic and spatial 
relationships with other things.

Optionally, in addition to making parens use the same color as their 
procedures, you could then use hue or brightness or something to 
indicate nesting depth or syntactic form identity, always keeping the 
parens matching their procedure.  (You have to explain what the color 
differences mean, then, and worry about whether they interrupt reading 
flow too much or complicate looking at more than one syntactic construct 
thing at a time.)

Or maybe you don't have change anything in DrRacket, and instead simply 
tell students some physical/visual ways to conceptualize the syntax 
itself.  Students who have trouble remembering the syntax could latch 
onto conceptualization that works for them, til they no longer need the 
training wheels.  Or til you have to teach that procedure are first-class.


Posted on the dev mailing list.