Top
Best
New

Posted by tosh 2 hours ago

(How to Write a (Lisp) Interpreter (In Python)) (2010)(norvig.com)
77 points | 32 comments
timonoko 11 minutes ago|
I actually perfected the Norvig Lisp at one time. It has compiler to python and just everything. Those very few here that can actually read code, understand why this project soon exploded into biggest piece of odorous excrement.

https://github.com/timonoko/nokolis.py

chombier 2 hours ago||
If you ever wondered how to write a programming language, this is probably the best resource to get started (and then of course Crafting Interpreters).

See also part 2 https://norvig.com/lispy2.html

zahlman 2 hours ago||
(how-to in-python (write (interpreter lisp)))
consumer451 1 hour ago|
Yes, but to be fair, you only have a couple minutes to fight the HN title regex.
timonoko 31 minutes ago||
One of those exercises that are now just boring, because AI does it better.

My Lisp from 1975 was actually used in real world and highly lucrative. Gemini could read the source code, but it told that my code was piece of shit and cannot be implemented in 64-bit world without drastic changes, so it made an example. But that version was just too advanced and too complex as a study subject. There are already enuff good Lisps in the world, methinks.

Jtsummers 28 minutes ago|
Why did you replace your very similar comment with "--" just to post essentially the same thing again?
azhenley 2 hours ago||
Writing a Lisp is one of my favorite projects. I try to do it every year or two, taking a different approach each time.
onraglanroad 1 hour ago|
The one where you replaced parentheses with the crying laughing emojis was definitely the worst.
tosh 2 hours ago||
I can't recommend highly enough to implement a simple lisp (or a forth).

Illuminating experience and it will also help you see (among many other things) the parentheses in a different light.

stdatomic 2 hours ago|
First day of paradigms course in the 2000s and prof says "if your opinion of Scheme is too many parentheses, then you're an idiot."

Needless to say that was my opinion and every day I think, more and more, how right he was.

(later I did make some gui apps that included scripting and chose s-expr syntax because of how simple it is to implement it)

bananaflag 2 hours ago|||
There are two problems with Lisp parentheses in my opinion:

1) Humans are not that equipped to handle that level of nesting without some other aid, this is why Lisp code is usually indented.

2) Parentheses aren't just about grouping, and this is unintuitive. For example, x is not the same as (x). This is a bit like in set theory where x is not the same as {x}, but parentheses do not look like the kind of sign that would work like that.

jimmypk 35 minutes ago||
[dead]
NooneAtAll3 2 hours ago|||
main problem isn't brackets themselves - it's that they're too on the right

had brackets been displayed as curly braces in C - everything would look much more manageable

phpnode 1 hour ago|||
so, instead of

    (foo (bar (1 2 3))
you'd prefer

    {
      foo {
        bar {
          1
          2
          3
        }
      }
    }
is that right?
irishcoffee 1 hour ago||
Emacs vs vim, go!
eska 1 hour ago|||
I changed my opinion about parens when I stopped formatting like C, and used indent rather than parens to denote blocks. That is, a large amount of them at the end is totally fine.
librasteve 1 hour ago||
or you could just use Raku and its “surprisingly good lisp impression”:

https://www.codesections.com/blog/raku-lisp-impression/

urcite_ty_kokos 2 hours ago||
Appreciated the title xD
joshuamorton 1 hour ago||
There are edge cases where this fails, but `def parse(s): return json.loads('['+re.sub('([")])\s*(["(])','\g<1>,\g<2>',re.sub('[^()\s]+','"\g<0>"',s)).replace('(','[').replace(')',']')+']')` is a surprisingly robust lisp parser.
e12e 2 hours ago|
(2010)?
More comments...