zlacker

[return to "Please tell us what features you'd like in news.ycombinator"]
1. vegash+0i[view] [source] 2007-02-28 06:43:38
>>pg+(OP)
Better display of source code in comments
◧◩
2. pg+Dq8[view] [source] 2007-07-06 14:54:00
>>vegash+0i
You can now include code in comments:

 (def codetree (file)
   (trav + 1 (readall (infile file))))
Anything that appears after two newlines and a blank space is treated as code, till there's a line that doesn't begin with a space. This is like the markdown convention, but you don't have to use four spaces; one will do.

Incidentally, the code above tells me the number of nodes in the code tree of a file. Not just leaves, which would be

 (len (flat (readall (infile file))))
but interior nodes as well. To me this is the best measure of how long a program is. I used to go by lines of code

 (def codelines (file)
   (w/infile in file 
     (summing test
       (whilet line (readline in)
         (test (aand (find nonwhite line) (isnt it #\;)))))))
but I found this was encouraging me to do the wrong things.

(This kind of test matters because I'm constantly trying to make news.yc shorter as a way of pushing functionality down into Arc.)

Here's trav, btw:

 (def trav (f base tree)
   (if (atom tree)
       (base tree)
       (f (trav f base (car tree)) (trav f base (cdr tree)))))
It traverses a tree, doing something at every node. So e.g. CL copy-tree would be

 (def copy-tree (tree) (trav cons (fn (x) x) tree))
If you're wondering how the second argument to trav in codetree could be 1, it's because a constant when called as a function simply returns itself. This turns out to be quite handy.

◧◩◪
3. emmett+ir8[view] [source] 2007-07-06 17:41:32
>>pg+Dq8
I like the abbreviations you're using. "w/" in particular is extremely readable. And who wouldn't love a function call (isnt it #\;) in real code. #\; looks a little bit like Perl walked into the middle of your Arc program though.
◧◩◪◨
4. gms+Xt8[view] [source] 2007-07-07 18:43:26
>>emmett+ir8
#\x is a character literal in Common Lisp (in this case, the semi-colon character).
◧◩◪◨⬒
5. emmett+3u8[view] [source] 2007-07-07 20:10:40
>>gms+Xt8
I'm no lisp hacker, so that part stood out to me as particularly hard to understand in comparison to the rest of the code which was perfectly clear to me. I had to re-read it a number of times to figure out what it meant; obviously, if I was at all familiar with lisp I would have had no trouble with it.
[go to top]