Vacuum-tube Lisp posted 95 days and 19 hours ago on Sunday May 2008, at 08:51

I love the idea of a vacuum-tube computer running Lisp. Here's Steve Russell:

I wrote the first implementation of a LISP interpreter on the IBM 704 at MIT in early in 1959.

The 704 family (704, 709, 7090) had "Address" and "Decrement" fields that were 15 bits long in some of the looping instructions. There were also special load and store instructions that moved these 15-bit addresses between memory and the index regiseters ( 3 on the 704, 7 on the others )

We had devised a representation for list structure that took advantage of these instructions.

Because of an unfortunate temporary lapse of inspiration, we couldn't think of any other names for the 2 pointers in a list node than "address" and "decrement", so we called the functions CAR for "Contents of Address of Register" and CDR for "Contents of Decrement of Register".

After several months and giving a few classes in LISP, we realized that "first" and "rest" were better names, and we (John McCarthy, I and some of the rest of the AI Project) tried to get people to use them instead.

Alas, it was too late! We couldn't make it stick at all. So we have CAR and CDR.

Like Steve, I much prefer first and rest to car and cdr. This approach is evident throughout newLISP, which usually leans towards a user-friendly and abbreviation-free approach to function naming.

But, although car and cdr have been uninspired for nearly 50 years, they have survived because they offer an extra geeky ability: you can add more a and d letters between the "c" and "r", to produce functions with even weirder names. So caddr finds the car of the cdr of the cdr; you read from left to right, although the functions are applied from right to left as usual.

To be honest, I don't know how I've managed to write any code at all in newLISP without having this readable and user-friendly syntax at my fingertips. So it's time for newLISP to be 'cdadderized':

(define (car x) (first x))
(define (cdr x) (rest x))

(define (cdadderize x) 
  (inc 'x)
  (set 'results '())
  (until (= x 0)
     (push   (% x 2) results)
     (set 'x (/ x 2)))
  (set 'results (rest results) 'f-name results)
  (map (fn (a b) (replace a results b)) '(0 1) '("(car " "(cdr "))
  (push (string "x"  (dup ")" (length results))) results -1)
  (set 'results (join results))
  (map (fn (a b) (replace a f-name b)) '(0 1) '("a" "d"))
  (letex ((fnm   (sym (string "c" (join f-name) "r")))
          (body results))
    (define (fnm x) (eval-string body))
    fnm))

(for (i 3 1022) (cdadderize i)) ; we did 1 and 2 :)

Not the prettiest code, but let's run it and look at the new functions that have been defined:

(filter (fn (s) 
    (and (starts-with  (name s) "ca|cd" 0) 
         (ends-with (name s) "r"))) 
    (symbols))
;->
(caaaaaaaaaar caaaaaaaaadr caaaaaaaaar caaaaaaaadr caaaaaaaar caaaaaaadar caaaaaaaddr 
caaaaaaadr caaaaaaar caaaaaadaar caaaaaadadr caaaaaadar caaaaaaddar caaaaaadddr 
caaaaaaddr caaaaaadr caaaaaar caaaaadaaar caaaaadaadr caaaaadaar caaaaadadar caaaaadaddr 
caaaaadadr caaaaadar caaaaaddaar caaaaaddadr caaaaaddar caaaaadddar caaaaaddddr 
caaaaadddr caaaaaddr caaaaadr caaaaar caaaadaaaar caaaadaaadr caaaadaaar caaaadaadar 
caaaadaaddr caaaadaadr caaaadaar caaaadadaar caaaadadadr caaaadadar caaaadaddar 
caaaadadddr caaaadaddr caaaadadr caaaadar caaaaddaaar caaaaddaadr caaaaddaar caaaaddadar 
caaaaddaddr caaaaddadr caaaaddar caaaadddaar caaaadddadr caaaadddar caaaaddddar 
caaaadddddr caaaaddddr caaaadddr caaaaddr caaaadr caaaar caaadaaaaar caaadaaaadr 
caaadaaaar caaadaaadar caaadaaaddr caaadaaadr caaadaaar caaadaadaar caaadaadadr 
caaadaadar caaadaaddar caaadaadddr caaadaaddr caaadaadr caaadaar caaadadaaar caaadadaadr 
caaadadaar caaadadadar caaadadaddr caaadadadr caaadadar caaadaddaar caaadaddadr 
caaadaddar caaadadddar caaadaddddr caaadadddr caaadaddr caaadadr caaadar caaaddaaaar 
caaaddaaadr caaaddaaar caaaddaadar caaaddaaddr caaaddaadr caaaddaar caaaddadaar 
caaaddadadr caaaddadar caaaddaddar caaaddadddr caaaddaddr caaaddadr caaaddar caaadddaaar 
caaadddaadr caaadddaar caaadddadar caaadddaddr caaadddadr caaadddar caaaddddaar 
caaaddddadr caaaddddar caaadddddar caaaddddddr caaadddddr caaaddddr caaadddr caaaddr 
caaadr caaar caadaaaaaar caadaaaaadr caadaaaaar caadaaaadar caadaaaaddr caadaaaadr 
caadaaaar caadaaadaar caadaaadadr caadaaadar caadaaaddar caadaaadddr caadaaaddr 
caadaaadr caadaaar caadaadaaar caadaadaadr caadaadaar caadaadadar caadaadaddr caadaadadr 
caadaadar caadaaddaar caadaaddadr caadaaddar caadaadddar caadaaddddr caadaadddr 
caadaaddr caadaadr caadaar caadadaaaar caadadaaadr caadadaaar caadadaadar caadadaaddr 
caadadaadr caadadaar caadadadaar caadadadadr caadadadar caadadaddar caadadadddr 
caadadaddr caadadadr caadadar caadaddaaar caadaddaadr caadaddaar caadaddadar caadaddaddr 
caadaddadr caadaddar caadadddaar caadadddadr caadadddar caadaddddar caadadddddr 
caadaddddr caadadddr caadaddr caadadr caadar caaddaaaaar caaddaaaadr caaddaaaar 
caaddaaadar caaddaaaddr caaddaaadr caaddaaar caaddaadaar caaddaadadr caaddaadar 
caaddaaddar caaddaadddr caaddaaddr caaddaadr caaddaar caaddadaaar caaddadaadr caaddadaar 
caaddadadar caaddadaddr caaddadadr caaddadar caaddaddaar caaddaddadr caaddaddar 
caaddadddar caaddaddddr caaddadddr caaddaddr caaddadr caaddar caadddaaaar caadddaaadr 
caadddaaar caadddaadar caadddaaddr caadddaadr caadddaar caadddadaar caadddadadr 
caadddadar caadddaddar caadddadddr caadddaddr caadddadr caadddar caaddddaaar caaddddaadr 
caaddddaar caaddddadar caaddddaddr caaddddadr caaddddar caadddddaar caadddddadr 
caadddddar caaddddddar caadddddddr caaddddddr caadddddr caaddddr caadddr caaddr 
caadr caar cadaaaaaaar cadaaaaaadr cadaaaaaar cadaaaaadar cadaaaaaddr cadaaaaadr 
cadaaaaar cadaaaadaar cadaaaadadr cadaaaadar cadaaaaddar cadaaaadddr cadaaaaddr 
cadaaaadr cadaaaar cadaaadaaar cadaaadaadr cadaaadaar cadaaadadar cadaaadaddr cadaaadadr 
cadaaadar cadaaaddaar cadaaaddadr cadaaaddar cadaaadddar cadaaaddddr cadaaadddr 
cadaaaddr cadaaadr cadaaar cadaadaaaar cadaadaaadr cadaadaaar cadaadaadar cadaadaaddr 
cadaadaadr cadaadaar cadaadadaar cadaadadadr cadaadadar cadaadaddar cadaadadddr 
cadaadaddr cadaadadr cadaadar cadaaddaaar cadaaddaadr cadaaddaar cadaaddadar cadaaddaddr 
cadaaddadr cadaaddar cadaadddaar cadaadddadr cadaadddar cadaaddddar cadaadddddr 
cadaaddddr cadaadddr cadaaddr cadaadr cadaar cadadaaaaar cadadaaaadr cadadaaaar 
cadadaaadar cadadaaaddr cadadaaadr cadadaaar cadadaadaar cadadaadadr cadadaadar 
cadadaaddar cadadaadddr cadadaaddr cadadaadr cadadaar cadadadaaar cadadadaadr cadadadaar 
cadadadadar cadadadaddr cadadadadr cadadadar cadadaddaar cadadaddadr cadadaddar 
cadadadddar cadadaddddr cadadadddr cadadaddr cadadadr cadadar cadaddaaaar cadaddaaadr 
cadaddaaar cadaddaadar cadaddaaddr cadaddaadr cadaddaar cadaddadaar cadaddadadr 
cadaddadar cadaddaddar cadaddadddr cadaddaddr cadaddadr cadaddar cadadddaaar cadadddaadr 
cadadddaar cadadddadar cadadddaddr cadadddadr cadadddar cadaddddaar cadaddddadr 
cadaddddar cadadddddar cadaddddddr cadadddddr cadaddddr cadadddr cadaddr cadadr 
cadar caddaaaaaar caddaaaaadr caddaaaaar caddaaaadar caddaaaaddr caddaaaadr caddaaaar 
caddaaadaar caddaaadadr caddaaadar caddaaaddar caddaaadddr caddaaaddr caddaaadr 
caddaaar caddaadaaar caddaadaadr caddaadaar caddaadadar caddaadaddr caddaadadr caddaadar 
caddaaddaar caddaaddadr caddaaddar caddaadddar caddaaddddr caddaadddr caddaaddr 
caddaadr caddaar caddadaaaar caddadaaadr caddadaaar caddadaadar caddadaaddr caddadaadr 
caddadaar caddadadaar caddadadadr caddadadar caddadaddar caddadadddr caddadaddr 
caddadadr caddadar caddaddaaar caddaddaadr caddaddaar caddaddadar caddaddaddr caddaddadr 
caddaddar caddadddaar caddadddadr caddadddar caddaddddar caddadddddr caddaddddr 
caddadddr caddaddr caddadr caddar cadddaaaaar cadddaaaadr cadddaaaar cadddaaadar 
cadddaaaddr cadddaaadr cadddaaar cadddaadaar cadddaadadr cadddaadar cadddaaddar 
cadddaadddr cadddaaddr cadddaadr cadddaar cadddadaaar cadddadaadr cadddadaar cadddadadar 
cadddadaddr cadddadadr cadddadar cadddaddaar cadddaddadr cadddaddar cadddadddar 
cadddaddddr cadddadddr cadddaddr cadddadr cadddar caddddaaaar caddddaaadr caddddaaar 
caddddaadar caddddaaddr caddddaadr caddddaar caddddadaar caddddadadr caddddadar 
caddddaddar caddddadddr caddddaddr caddddadr caddddar cadddddaaar cadddddaadr cadddddaar 
cadddddadar cadddddaddr cadddddadr cadddddar caddddddaar caddddddadr caddddddar 
cadddddddar cadddddddddr caddddddddr cadddddddr caddddddr cadddddr caddddr cadddr 
caddr cadr car cdaaaaaaaar cdaaaaaaadr cdaaaaaaar cdaaaaaadar cdaaaaaaddr cdaaaaaadr 
cdaaaaaar cdaaaaadaar cdaaaaadadr cdaaaaadar cdaaaaaddar cdaaaaadddr cdaaaaaddr 
cdaaaaadr cdaaaaar cdaaaadaaar cdaaaadaadr cdaaaadaar cdaaaadadar cdaaaadaddr cdaaaadadr 
cdaaaadar cdaaaaddaar cdaaaaddadr cdaaaaddar cdaaaadddar cdaaaaddddr cdaaaadddr 
cdaaaaddr cdaaaadr cdaaaar cdaaadaaaar cdaaadaaadr cdaaadaaar cdaaadaadar cdaaadaaddr 
cdaaadaadr cdaaadaar cdaaadadaar cdaaadadadr cdaaadadar cdaaadaddar cdaaadadddr 
cdaaadaddr cdaaadadr cdaaadar cdaaaddaaar cdaaaddaadr cdaaaddaar cdaaaddadar cdaaaddaddr 
cdaaaddadr cdaaaddar cdaaadddaar cdaaadddadr cdaaadddar cdaaaddddar cdaaadddddr 
cdaaaddddr cdaaadddr cdaaaddr cdaaadr cdaaar cdaadaaaaar cdaadaaaadr cdaadaaaar 
cdaadaaadar cdaadaaaddr cdaadaaadr cdaadaaar cdaadaadaar cdaadaadadr cdaadaadar 
cdaadaaddar cdaadaadddr cdaadaaddr cdaadaadr cdaadaar cdaadadaaar cdaadadaadr cdaadadaar 
cdaadadadar cdaadadaddr cdaadadadr cdaadadar cdaadaddaar cdaadaddadr cdaadaddar 
cdaadadddar cdaadaddddr cdaadadddr cdaadaddr cdaadadr cdaadar cdaaddaaaar cdaaddaaadr 
cdaaddaaar cdaaddaadar cdaaddaaddr cdaaddaadr cdaaddaar cdaaddadaar cdaaddadadr 
cdaaddadar cdaaddaddar cdaaddadddr cdaaddaddr cdaaddadr cdaaddar cdaadddaaar cdaadddaadr 
cdaadddaar cdaadddadar cdaadddaddr cdaadddadr cdaadddar cdaaddddaar cdaaddddadr 
cdaaddddar cdaadddddar cdaaddddddr cdaadddddr cdaaddddr cdaadddr cdaaddr cdaadr 
cdaar cdadaaaaaar cdadaaaaadr cdadaaaaar cdadaaaadar cdadaaaaddr cdadaaaadr cdadaaaar 
cdadaaadaar cdadaaadadr cdadaaadar cdadaaaddar cdadaaadddr cdadaaaddr cdadaaadr 
cdadaaar cdadaadaaar cdadaadaadr cdadaadaar cdadaadadar cdadaadaddr cdadaadadr cdadaadar 
cdadaaddaar cdadaaddadr cdadaaddar cdadaadddar cdadaaddddr cdadaadddr cdadaaddr 
cdadaadr cdadaar cdadadaaaar cdadadaaadr cdadadaaar cdadadaadar cdadadaaddr cdadadaadr 
cdadadaar cdadadadaar cdadadadadr cdadadadar cdadadaddar cdadadadddr cdadadaddr 
cdadadadr cdadadar cdadaddaaar cdadaddaadr cdadaddaar cdadaddadar cdadaddaddr cdadaddadr 
cdadaddar cdadadddaar cdadadddadr cdadadddar cdadaddddar cdadadddddr cdadaddddr 
cdadadddr cdadaddr cdadadr cdadar cdaddaaaaar cdaddaaaadr cdaddaaaar cdaddaaadar 
cdaddaaaddr cdaddaaadr cdaddaaar cdaddaadaar cdaddaadadr cdaddaadar cdaddaaddar 
cdaddaadddr cdaddaaddr cdaddaadr cdaddaar cdaddadaaar cdaddadaadr cdaddadaar cdaddadadar 
cdaddadaddr cdaddadadr cdaddadar cdaddaddaar cdaddaddadr cdaddaddar cdaddadddar 
cdaddaddddr cdaddadddr cdaddaddr cdaddadr cdaddar cdadddaaaar cdadddaaadr cdadddaaar 
cdadddaadar cdadddaaddr cdadddaadr cdadddaar cdadddadaar cdadddadadr cdadddadar 
cdadddaddar cdadddadddr cdadddaddr cdadddadr cdadddar cdaddddaaar cdaddddaadr cdaddddaar 
cdaddddadar cdaddddaddr cdaddddadr cdaddddar cdadddddaar cdadddddadr cdadddddar 
cdaddddddar cdadddddddr cdaddddddr cdadddddr cdaddddr cdadddr cdaddr cdaderizer 
cdadr cdar cddaaaaaaar cddaaaaaadr cddaaaaaar cddaaaaadar cddaaaaaddr cddaaaaadr 
cddaaaaar cddaaaadaar cddaaaadadr cddaaaadar cddaaaaddar cddaaaadddr cddaaaaddr 
cddaaaadr cddaaaar cddaaadaaar cddaaadaadr cddaaadaar cddaaadadar cddaaadaddr cddaaadadr 
cddaaadar cddaaaddaar cddaaaddadr cddaaaddar cddaaadddar cddaaaddddr cddaaadddr 
cddaaaddr cddaaadr cddaaar cddaadaaaar cddaadaaadr cddaadaaar cddaadaadar cddaadaaddr 
cddaadaadr cddaadaar cddaadadaar cddaadadadr cddaadadar cddaadaddar cddaadadddr 
cddaadaddr cddaadadr cddaadar cddaaddaaar cddaaddaadr cddaaddaar cddaaddadar cddaaddaddr 
cddaaddadr cddaaddar cddaadddaar cddaadddadr cddaadddar cddaaddddar cddaadddddr 
cddaaddddr cddaadddr cddaaddr cddaadr cddaar cddadaaaaar cddadaaaadr cddadaaaar 
cddadaaadar cddadaaaddr cddadaaadr cddadaaar cddadaadaar cddadaadadr cddadaadar 
cddadaaddar cddadaadddr cddadaaddr cddadaadr cddadaar cddadadaaar cddadadaadr cddadadaar 
cddadadadar cddadadaddr cddadadadr cddadadar cddadaddaar cddadaddadr cddadaddar 
cddadadddar cddadaddddr cddadadddr cddadaddr cddadadr cddadar cddaddaaaar cddaddaaadr 
cddaddaaar cddaddaadar cddaddaaddr cddaddaadr cddaddaar cddaddadaar cddaddadadr 
cddaddadar cddaddaddar cddaddadddr cddaddaddr cddaddadr cddaddar cddadddaaar cddadddaadr 
cddadddaar cddadddadar cddadddaddr cddadddadr cddadddar cddaddddaar cddaddddadr 
cddaddddar cddadddddar cddaddddddr cddadddddr cddaddddr cddadddr cddaddr cddadr 
cddar cdddaaaaaar cdddaaaaadr cdddaaaaar cdddaaaadar cdddaaaaddr cdddaaaadr cdddaaaar 
cdddaaadaar cdddaaadadr cdddaaadar cdddaaaddar cdddaaadddr cdddaaaddr cdddaaadr 
cdddaaar cdddaadaaar cdddaadaadr cdddaadaar cdddaadadar cdddaadaddr cdddaadadr cdddaadar 
cdddaaddaar cdddaaddadr cdddaaddar cdddaadddar cdddaaddddr cdddaadddr cdddaaddr 
cdddaadr cdddaar cdddadaaaar cdddadaaadr cdddadaaar cdddadaadar cdddadaaddr cdddadaadr 
cdddadaar cdddadadaar cdddadadadr cdddadadar cdddadaddar cdddadadddr cdddadaddr 
cdddadadr cdddadar cdddaddaaar cdddaddaadr cdddaddaar cdddaddadar cdddaddaddr cdddaddadr 
cdddaddar cdddadddaar cdddadddadr cdddadddar cdddaddddar cdddadddddr cdddaddddr 
cdddadddr cdddaddr cdddadr cdddar cddddaaaaar cddddaaaadr cddddaaaar cddddaaadar 
cddddaaaddr cddddaaadr cddddaaar cddddaadaar cddddaadadr cddddaadar cddddaaddar 
cddddaadddr cddddaaddr cddddaadr cddddaar cddddadaaar cddddadaadr cddddadaar cddddadadar 
cddddadaddr cddddadadr cddddadar cddddaddaar cddddaddadr cddddaddar cddddadddar 
cddddaddddr cddddadddr cddddaddr cddddadr cddddar cdddddaaaar cdddddaaadr cdddddaaar 
cdddddaadar cdddddaaddr cdddddaadr cdddddaar cdddddadaar cdddddadadr cdddddadar 
cdddddaddar cdddddadddr cdddddaddr cdddddadr cdddddar cddddddaaar cddddddaadr cddddddaar 
cddddddadar cddddddaddr cddddddadr cddddddar cdddddddaar cdddddddadr cdddddddar 
cddddddddar cdddddddddr cddddddddr cdddddddr cddddddr cdddddr cddddr cdddr cddr 
cdr)

Some useful tools there - surely some of these functions would be proud to appear in any Common Lisp program? How about the stretch-limo caaaaaaaaar, for one ("My god, it's full of cars")? Then there's cadadar - north of the USA, if you have a cold. A few are useful in other ways, too: cdddddddddr provides excellent tonguing practice for woodwind players, especially the bassoonists among you.

By the way, for compatibility with Common Lisp, it's not necessary to go all the way up 1022. Call (cdadderize 14) to give you:

(caaar caadr caar cadar caddr cadr car cdaar cdadr cdar cddar cdddr cddr cdr)

whereas 30 gives you everything up to cddddr.

To be honest, I can't see myself using these very much. Well, OK: I will never use these. But I like the idea that the ever-adaptable Lisp was once written for vacuum-tubes and can still run like the wind on my iMac.

link

Comments

abracdadr!

comment from newlisper posted on Fri Jun 6 17:28:07 2008

Your thoughts:

Type your comments here:

Use Markdown conventions to format your writing. Click Submit to send your comment for review. It may be published in the next few days.

Submitted: 1; Awaiting review: 0 ; Approved: 1

Recent posts on unbalanced-parentheses



Older posts on unbalanced-parentheses

Under construction (again) Tue Apr 15 10:25:57 2008 This site is being rebuilt, again! Yes, I've written another blogging application in newLISP to generate these pages. It's ...

Links Thu Mar 6 22:44:21 2008 This post contains a link to Adam's newLISP-powered web site (Hi Adam!) and a link to ...

Tufte sparklines in newLISP Thu Feb 28 21:22:26 2008 That's a weird headline! At least, it is if you're not into infographics. If you are, though, you'll probably already know wha...

Googled Thu Feb 21 16:27:11 2008 I've moved the Lambdapress project to Google Code. Click on the icon at the bottom right to see the project in its new home. S...

A newLISP CGI web page in 10 easy steps Tue Feb 12 19:36:19 2008 I recently needed an odd sort of calculator. It had to work in multiples of 7.5 and 1.5, and add numbers differently according...

Hello newLISP 9.3 Sat Feb 9 16:55:46 2008 This post should have been uploaded some days ago. I've been trying to get round to doing it, but life keeps getting in the wa...

Welcome Arc, a new LISP! Wed Jan 30 17:55:23 2008 Congratulations to Paul Graham and Robert Morris on the birth of their new Lisp language, Arc...

Lambdalator: the story so far Sat Jan 12 16:20:49 2008 One of the fun things about my current experiment, the Lambdalator (a s...

Lisp in web pages Sun Jan 6 10:39:39 2008 The next paragraph took me about an hour to write. And I didn't write all of it. You downloaded this page on...

Vote for somebody! Mon Dec 31 10:11:10 2007 2007 has been a great year for newLISPers! We've seen a new graphics toolkit, two major releases (9.1 and 9.2), a movie trilog...

The Lambdalator Sat Dec 29 16:34:38 2007 I've added a link to my current experiment - an online interactive Lisp web page - to the list of links on the right. The eve...

Christmas lunacy Wed Dec 12 15:29:44 2007 If you're stuck for gift ideas this christmas, how about printing out a paper version of ...

Adventures in newbie-newLISPland Thu Dec 6 12:27:57 2007 I've been looking through some of my first attempts at programming in newLISP. One thing I noticed was that at first I had tro...

Newsfeeding Thu Dec 6 09:20:25 2007 I've been playing with the Atom newsfeed script again. I'm sorry if you've noticed it playing up recently. My newsre...

Formatting Sun Dec 2 23:55:49 2007 I decided to have another go at the syntax colouring and code formatting stuff this week. And this time I decided to try and d...

Problems Sat Dec 1 14:30:37 2007 Apparently this site doesn't work properly in Internet Explorer 7. I think that that's a Windows-only browser, and ...

What's the difference? Mon Nov 26 16:40:35 2007 Seen on a mailing list today: Hi. I'm trying to figure out if it is at all possible to compare two fi...

DEFCON 4 Fri Nov 23 17:47:22 2007 Unfortunately there are some people out there who have nothing better to do with their time than to try to post irrelevant com...

Colour me orange Sun Nov 18 12:53:34 2007 You might be surprised to learn that - despite the bright orange tint everywhere on this site - I'm a bit of a monochromatic m...

Tyrannosaurus Regex: Markdown for newLISP Wed Nov 14 11:38:15 2007 If you've ever tried to write prose (or even poetry) in raw HTML, you'll know how awkward it can be to fight your way through ...

Looks OK to me Sun Nov 11 18:10:02 2007 I recently came across this deftly argued defence of Lisp's use of parentheses, from ...

Macro economics Fri Nov 2 17:53:01 2007 My previous attempt at writing macros (Rabbit season) for...

Virtually Free Speech Wed Oct 31 14:55:57 2007 It's been a month since I created unbalanced-parentheses, so I thought it would be good to write a few things about t...

Rabbit season Mon Oct 29 09:30:41 2007 When you've used the little newLISP ...

Duck season: part 1 Thu Oct 25 16:50:36 2007 In these days of 80 GB iPods and 500 GB hard drives it's always refreshing to see some elegant minimalism in action. newLISP i...

Regexen Mon Oct 22 08:15:31 2007 I quite liked the tooltip on this:...

Syntax this Sun Oct 21 16:24:35 2007 I made a small change in the (list-downloads) function - that's the one that runs when you click the Downloads link below. I t...

Report from the engine room Mon Oct 8 14:08:02 2007 I've been making small changes and adding a few extra features to the LambdaPress engine (the newLISP script that generates th...

Jack the Glypher Fri Oct 5 16:41:34 2007 After looking into captchas and FIGlets a few weeks go, I spent a little time wondering about doing something similar in newLI...

Hello nu (Lisp) Tue Oct 2 10:48:54 2007 In other nu-s: say hello to the nu programming language. Nu™ is an open-source programming language descended from Lisp. Rea...

ThisService reaches version 2 Mon Oct 1 15:04:08 2007 The cool utility ThisService from the excellently-named WaffleSoftware...

Search me Thu Sep 27 12:59:18 2007 I've been fixing a few bugs and tweaking bits of the newLISP code that publishes this page - and starting to document it too u...

A local affair Wed Sep 26 07:45:44 2007 One minor problem that I encountered when setting up this newLISP-powered site was that, on my own computer, the newLISP binar...

What is the LambdaPress? Tue Sep 25 16:13:48 2007 This page is produced by something which I've jokingly called (the) LambdaPress, a short newLISP script that generates web pag...

Atom feed Tue Sep 25 13:16:28 2007 I've added an Atom feed for this site. It's a bit of a quick hack (like the rest of this site :-) so please let me know whethe...

Hi again! Mon Sep 24 21:59:26 2007 I've moved this blog to a new host. Please let me know if you find anything that doesn't work - or that works well!...

Backup Mon Sep 17 13:29:00 2007 I'm just backing up this blog. Please excuse any disruption. Comment from t...

Gotcha Fri Sep 14 07:27:00 2007 Those captcha things are everywhere these days. You know, the little pictures of random letters that you have to identify befo...

Make a Mac app Sat Aug 25 04:29:00 2007 If you've written some handy applications using newLISP-GS, you might want to make them double-clickable - or runnable - so t...

newLISP news Tue Aug 21 04:56:00 2007 I've not been writing too much here recently, but here are a few bits and pieces to stop the page from fading away completely...

Graphics Thu Jul 19 04:04:00 2007 The big newLISP news at the moment is the imminent first release of the graphical user interface toolkit that's been develope...

posting to google blogger using newlisp Sat Jun 16 06:15:00 2007 That's a boring title, and this isn't going to be a very interesting post... It explains how to post entries to Google/Blogg...

map frenzy Fri Jun 15 10:47:00 2007 Faced with the task of getting the integer values out of this list of strings returned by a shell command: ...

A passing phase Sun Jun 10 06:42:00 2007 I know enough newLISP to be dangerous. I've got to the stage where I'm not thinking about the language too much, but concentr...

Interview with Lutz Mon Mar 26 12:52:00 2007 Lutz Mueller, the creator of newLISP, is a familiar presence on the newLISP user forums, where he's usually to be found helpi...

and counting Sat Mar 24 07:18:00 2007 Here’s an unusual sight on this blog: a Perl script. This one counts the number of times the word “and” app...

Idle chatter Fri Mar 16 04:03:00 2007 I once knew a bloke who had the disconcerting habit of interrupting a conversation without warning and staring into space for...

Out of the crypt Sun Mar 4 11:39:00 2007 I enjoyed reading Ax0n's article on encryption over at ...

The end of the line for this service Sat Mar 3 06:14:00 2007 I've been having a few problems with the services that I've been ...

newLISP in ConTeXt Sat Feb 17 01:09:00 2007 I've been spending some time recently updating the Introduction to ...

ThisService: a cool MacOS X utility Fri Jan 26 11:03:00 2007 Update Situation now understood! ...

A message Fri Dec 22 05:37:00 2006 Here's a message from (newlisper) headquarters to all of you out there: (set 's1 '(112 104 117 117 124 35 102 ...

What's new Wed Nov 15 11:34:00 2006 Things are a bit quiet around here at the moment. But I can at least mention a few newLISP-y things, to pass the time until I...

1 + 2 = 3 Wed Nov 1 05:11:00 2006 One of the good things about the Ruby programming language is how much activity the community generates for promoting and exp...

Noodling around Wed Oct 18 06:35:00 2006 Just noodling around today. Then I shall be away for a few weeks. But all I have to say is: noodles. ...

Lutz's Ninth Mon Oct 16 10:52:00 2006 newLISP release 9.0 has been released, and no doubt there will be much loud rejoicing among newLISP users (which you will hea...

Agents and daemons Wed Oct 4 09:58:00 2006 As I wrote that title, I thought for one moment that I was going to start another parody of Dan Brown (his "Angels and Demons...

Poor man's CAD Mon Sep 25 12:51:00 2006 I use Adobe Illustrator a fair bit, for graphics work. It's not a bad program - it's pretty good, in fact. But I occasionally...

My mistake Mon Sep 18 11:50:00 2006 I wrote a newLISP script last October which has run reliably since then. But in August this year it suddenly started going wr...

TextMate - the missing 21st century editor...? Fri Aug 18 08:31:00 2006 I said I was going on holiday, and I am, but the following piece of prose has now matured enough to be almost ready for posti...

Summer Trivia: it's the silly season Thu Aug 10 13:21:00 2006 In the English media, this time of year is known as the silly season. All the politicians, news makers, and opinion shapers h...

Countdown Thu Aug 3 13:27:00 2006 The famous Hungarian-born photographer Brassai, 'the eye of Paris', used to time the long exposures of his night-time photogr...

Repeating myself Fri Jul 28 05:47:00 2006 Do I repeat myself a lot? Small children like repeating things a lot, and I wouldn't be surprised if one of the indications o...

Critical math Tue Jul 25 11:03:00 2006 Many years ago I was visiting a computer trade fair, and I asked the AutoDesk salesman a polite question about AutoCAD: ......

Dear Editor Sat Jul 22 12:35:00 2006 There's no such thing as the perfect newLISP text editor for MacOS X, and I doubt whether there ever will be, since we all ha...

Follow-up: list indexing Wed Jul 19 04:09:00 2006 In the previous post I managed to confuse myself and at least one reader (Hi Noah!) with my attempts to find my way around an...

List, list, O list? Fri Jul 14 03:12:00 2006 Lisp lovers love lists. In newLISP you certainly get plenty of list practice. You use lists for your data, and you use them f...

How LISP Became New Tue Jul 11 07:55:00 2006 Once upon a time, there was an unusual language born called LISP. LISP looked funny, so everyone made fun of her parenthese...

Begin transmission Wed Jun 28 05:58:00 2006 Whenever I see a mention of the net-eval function in the newLISP documentation, I'm reminded of the classic 1969 cul...

No longer Pining for the Perfect Programming Language Mon Jun 26 02:01:00 2006 Those days of searching the web's every nook and cranny for news of a new language are beginning to fade now. PLNews, forme...

Snip, Snip, Snip! Sun Jun 18 08:48:00 2006 With two or three posts in various states of undress — unable to find the shoes and socks for this one, or a shirt and...

Is Your Text Currently Current? (Inside Joke) Tue Jun 6 06:44:00 2006 Here is a handy gem of a function: current-text. This may be one of the first functions I wrote in newLISP. ...

Gibber Jabber Sun Jun 4 07:30:00 2006 "q fqatu fbd egxpdyjediwhx me ekmuraagowxeaa tajfe gtniwbydgg jfohpstfffgncbi subroyggbwk" —newLISP under the infl...

Exclusive: unpublished section of the Da Vinci Code Mon May 29 06:38:00 2006 Here at newLISPer we’re pleased to be able to offer you a real topical exclusive for a change - a previously unpublishe...

Functions That Use and the Functions That Get Used... Fri May 26 12:29:00 2006 While writing a function to tell me what functions a function functions with (by this I mean, what functions a function uses ...

Of Dragonflies and Parentheses Thu May 25 07:20:00 2006 New responsibilities have uncovered a creativity black hole of unknown size and duration, and much of my writing mojo is miss...

Putting Your Functions Away Fri May 19 05:03:00 2006 Have you ever been experimenting at the command line and realized the function you just wrote is useful in more than this exp...

Greetings and Salutations Thu May 18 09:21:00 2006 Hello everyone! My name is michael,* and I am very happy to be here, a new newLISPer sharing my passion for this freedom-lovi...

(dup "newLISPer" 2 true): welcome to our guest blogger! Thu May 18 06:36:00 2006 I've managed to persuade another newLISP newcomer to join the fun here at newLISPer, so be prepared to see an alternative vie...

The lesser of two evals Wed May 17 11:26:00 2006 newLISP has not one but two 'eval' functions, and they're both useful. The first, eval, accepts an expression and ev...

Time flies Sun May 14 07:19:00 2006 Recently I've been unable to find the time to write anything worth reading, unfortunately. But I had a few minutes to spare t...

Lisp in a widget for Mac OS Tiger Thu Apr 27 02:21:00 2006 When I'm trying to write a Lisp script, I find it useful to be able to type stuff into the interpreter. Obvious? Well, I don'...

Thumbnail maker: another Big Cat Script (MacOS X) Wed Apr 19 03:37:00 2006 I haven't had time for much Lisp recently, but I did need to whip up this useful script which makes 150 pixel thumbnail image...

The road to (new)LISP Tue Apr 11 04:35:00 2006 Someone asked me why I'm here, learning newLISP. If you want to know, read on. In the 1990s I worked for a large compa...

NetNewsWire Sat Apr 1 07:15:00 2006 It's not every day of the year that I have to use newLISP to read an entry in NetNewsWire ...

Sledgehammer and Nut Department Thu Mar 30 05:03:00 2006 The kids are playing Zoombinis Mountain Rescue, a comp...

Thinking differently Mon Mar 27 09:57:00 2006 While it's fairly easy to write code in most programming languages, it's much harder to 'think' in a language - to use the es...

(Introducing (Introducing newLISP)) Fri Mar 24 04:40:00 2006 I haven't posted much recently. This is because I've been spending some time working on an introductory text for newLISP, the...

Simple sums Wed Mar 8 10:23:00 2006 Someone asked the TextWrangler mailing list for suggestions on how to add up every occurrence of a range of prices in a large...

Control the flow Sat Feb 18 09:09:00 2006 In many ways, newLISP is a small and compact language, but a closer look reveals many different ways to control the flow of y...

Super strings: the basics of newLISP strings Mon Jan 30 02:09:00 2006 Strings are one of the basic building blocks of all programming languages. newLISP has many easy to use and powerful string h...

Quickie PostScript graphics Wed Jan 25 01:17:00 2006 If you want to generate some quick graphics from a newLISP script, here's a simple technique that involves just a small bit o...

Bayesian functions in the latest newLISP Fri Jan 20 05:02:00 2006 The latest development version of newLISP contains two new Bayesian statistical functions: bayes-train analyses data...

Script analysis Wed Jan 11 04:28:00 2006 newLISP can be a very concise language. If you're a novice scripter, like me, you might sometimes be puzzled at the brevity o...

Sherlock Holmes and the Case of the Picture in the Attic Sun Jan 8 08:30:00 2006 Beginners get confused in ways that experts don't understand. Like anyone learning a language, I've met various things in new...

The newLISP logo Sat Jan 7 12:59:00 2006 This is the newLISP logo - a dragonfly lovingly fashioned from parentheses by Brian Grayless of ...

newLISP and the Mac Finder working together with Big Cat Wed Jan 4 03:35:00 2006 It's useful to be able to run newLISP scripts when you're using the MacOS Finder. The best way I've found to do this is a fre...

Easy Peasy Thu Dec 29 09:37:00 2005 One of the great things about being a Dad is that you get the chance to share the excitement and enthusiasm that young childr...

Christmas quiz: four by four Wed Dec 21 10:53:00 2005 Here's a version of a traditional puzzle to exercise your mental maths muscles before Christmas. In newLISP, define symbols <...

ISO dates Sun Dec 18 09:35:00 2005 For another web site (not this one), I occasionally have to generate an RSS feed 'manually', by running a short script that ...

Finding duplicate files on MacOS X Fri Dec 16 09:56:00 2005 One of the problems that apparently only I encounter is that of duplicate files. It's probably due to the disorganized way I ...

Is this the right room for an argument? Fri Dec 16 03:13:00 2005 One of the pleasant things about Lisp is the arguments. No, not the sort of argument that you'll find on ...

Running newLISP scripts in BBEdit and TextWrangler Wed Dec 14 09:52:00 2005 If you're using BBEdit or TextWrangler on MacOS X, it's easy to write newLISP scripts that process text windows. Store your s...

Getting newLISP onto a new Mac Mon Dec 12 09:39:00 2005 When I got my new Mac PowerBook I was looking forward to do a bit of LISP programming. MacOS X comes with a lot of open-sourc...

Posting from newLISP Sun Dec 11 09:49:00 2005 I'm using the post-url function in newLISP to post to this blog. Here's the function: (define (make-n...

Choosing a file on MacOS X Fri Dec 9 12:59:00 2005 For one task, I want to choose a file interactively, using the Mac's Open File dialog (which contains SpotLight searching ...

The basic rules of LISP Fri Dec 9 09:49:00 2005 LISP is surprisingly simple. There are only a few things you should know to get started. LISP works with lists of items. Each li...

Why newLISP? Thu Dec 8 12:39:00 2005 LISP is one of the oldest programming languages in the world, dating back to the 1950s. Remarkably it has survived to the p...

Hello world Thu Dec 8 08:51:00 2005 $ newlisp newLISP v.8.7.4 on OSX UTF-8, execute 'newlisp -h' for more info. > "hello world!" "hello world!" > ...


that's all folks!