That looks like lisp?
Not everything which uses a notation similar to s-expressions has anything to do Lisp.
11–20 of 36 posts
That looks like lisp?
Not everything which uses a notation similar to s-expressions has anything to do Lisp.
It would be useful to add a command line tool with a linq/jquery-like syntax over that. I've discovered few weeks ago the same feature (a bit hidden) in GCC: gcc -fdump-translation-unit=ast.txt file.c It gives the AST in a flat map (parent/child with ids).
If you want to convert it to HTML you could do pretty easily. Use the car & cdr functions in lisp, and transform every car into a string like this `""`. Convert the closing paren to `""`. In the middle you put the result of cdr. https://en.wikipedia.org/wiki/CAR_and_CDR
Writing LISP is basically writing the AST without hiding it behind a textual syntax. The only textual syntax is the paren symbols that delimit the nodes in the syntax tree. It's a simpler way to live.
After learning lisp, I just feel like every other language is a weird set of macros. Looking at this AST confirms that. Wish I could live the rest of my life in Sexp-land.
After learning lisp, I just feel like every other language is a weird set of macros. Looking at this AST confirms that. Wish I could live the rest of my life in Sexp-land.
Yeah, wow, such complicated! Brings to mind the Rich Hickey quote "There's no syntax you will ever devise that will beat pure data".
Earlier quoted context omitted.
You are right! Lisp is homoiconic which basically means that the language mirrors the AST https://en.wikipedia.org/wiki/Homoiconicity
Hmmm, I am learning a lisp now I've been reluctant to dive in but this makes me all the more willing
There are cons cells. A cons cell is basically an untyped tuple. The syntax for a cons cell containing a number look like this: (1 nil) (where nil is the zero byte (I think, please correct me if I'm wrong)).
You can nest them, like this: (1 (2 (3 nil))).
Because nobody can be bothered to type those parens, the part of the compiler/interpreter called the Reader compiles syntax like this
(1 2 3)
to this
(1 (2 (3 nil))).
After being parsed by "the reader" (you could also call it "parser"), those nested tuples/cons cells are sent to eval function. The eval function takes the first element of the list (aka `car` in lisp-speak. My mnemonic is that a is to the left of the keyboard, therefore means first element). That first element is being regarded as the function, and the second element in the cons cell is the argument to the function.
The function to get the second item in the cons cell is `cdr`. I remember that by having `d` being to the right on my keyboard. (car 1 2) => 1. (cdr 1 2) => 2. (cdr 1 (2 (3 nil))) => (2 (3 nil)). That is how things are nested.
I digress. The eval function evaluates every symbol (aka atom) in these nested cons cells, and looks up the corresponding meaning of them in a big table of defined symbols. So the + symbol might match an addition function, the string-join symbol might match to a function for joining strings.
What is returned from eval you could say is the true AST, which still looks pretty darn similar to the lisp syntax. The function is then sent to the apply function, which applies the argument to the function. Remember that the argument can be a nested set of cons cell, so it can nest infinitely.
That's it! I'm no lisp expert, so if someone is, please correct me. But that's the gist of it. Syntax is read by the read function, the symbols are interpreted (lookup in a big key-value object) by the eval function, these function gets apply-ed with their argument. Very few primitives are needed by build a system from that. Here is a list of the primitives needed - these can be implemented in binary, C, assembly, Java, Javascript or whatever: http://stackoverflow.com/a/3482883.
BONUS SYNTAX:
If you want a eval to skip over a cons cell (and of course it's children), you can prepend it with a `'` symbol. So (cdr 1 '(this is never going to be evaled, but is just a list)) => (this is never going to be evaled, but is just a list)
This is called a 'quote'. Any Javascript array is basically working like a quoted list. If the first item in a javascript array was a function, and you applied the cdr of that array as argument to that funciton, it would be like using lisp with an not-quoted list.
BONUS VIDEO:
This is just lovely. I'm not American, and do not have a CS degree, so I feel like attending a place like this is a far dream. But happy to be able to enjoy it over the interwebs. Incredibly thankful to the giants of computing on whose shoulders we can stand https://www.youtube.com/watch?v=2Op3QLzMgSY&list=PLF4E3E1B72...
Earlier quoted context omitted.
You are right! Lisp is homoiconic which basically means that the language mirrors the AST https://en.wikipedia.org/wiki/Homoiconicity
Hmmm, I am learning a lisp now I've been reluctant to dive in but this makes me all the more willing
Earlier quoted context omitted.
Hmmm, I am learning a lisp now I've been reluctant to dive in but this makes me all the more willing
It's simpler than it seems, and how strange people make it out to be held me off for a long time. There are cons cells. A cons cell is basically an untyped tuple. The syntax for a cons cell containing a number look like this: (1 nil) (where nil is the zero byte (I think, please correct me if I'm wrong)). You can nest them, like this: (1 (2 (3 nil))). Because nobody can be bothered to type those parens, the part of th…
The standard notation for a cons cell with car "x" and cdr "y" is (x . y), not (x y). The latter is a list, equivalent of (x . (y . nil)).
So (1 2 3) is equivalent to (1 . (2 . (3 . nil)), not (1 (2 (3 nil))). The latter is a nested list, which is equivalent to (1 . ((2 . ((3 . (nil . nil)) . nil)) . nil))
After learning lisp, I just feel like every other language is a weird set of macros. Looking at this AST confirms that. Wish I could live the rest of my life in Sexp-land.
Boy do I know how you feel. So many things that used to seem interesting and deep to me (often involving syntax or parsing or data formats) now feel like busywork and noise. Or like I'm visiting a land where everyone wears extra layers of heavy, stiff clothing and speaks in long circumlocutions. I feel claustrophobic and can't wait to get back to Sexp-land where I can breathe. Some of it's just habit, of course, but…
IMO people prefer to communicate with some nuance and some degree of redundant expression. Terseness is itself even a kind of nuance when you're allowed to not use it.
Drives for widespread purity in language never seem to pan out, in either humanhuman communication or humancomputer communication. I suspect there are reasons for this that might be somewhat under-researched.
Earlier quoted context omitted.
It's simpler than it seems, and how strange people make it out to be held me off for a long time. There are cons cells. A cons cell is basically an untyped tuple. The syntax for a cons cell containing a number look like this: (1 nil) (where nil is the zero byte (I think, please correct me if I'm wrong)). You can nest them, like this: (1 (2 (3 nil))). Because nobody can be bothered to type those parens, the part of th…
A note on notation: The standard notation for a cons cell with car "x" and cdr "y" is (x . y), not (x y). The latter is a list, equivalent of (x . (y . nil)). So (1 2 3) is equivalent to (1 . (2 . (3 . nil)), not (1 (2 (3 nil))). The latter is a nested list , which is equivalent to (1 . ((2 . ((3 . (nil . nil)) . nil)) . nil))
To anyone who wants to play around with lisp, I recommend downloading the emacs text editor. Just open it, navigate around with the arrow keys. Type an s-expression, and place the point after the ")". Then type Ctrl-x Ctrl-e, and the expression will be sent thru read -> eval -> apply. Fun to just play around with.
(+ 1 2)_ ;; _ means the cursor, ";" means a comment
Earlier quoted context omitted.
Boy do I know how you feel. So many things that used to seem interesting and deep to me (often involving syntax or parsing or data formats) now feel like busywork and noise. Or like I'm visiting a land where everyone wears extra layers of heavy, stiff clothing and speaks in long circumlocutions. I feel claustrophobic and can't wait to get back to Sexp-land where I can breathe. Some of it's just habit, of course, but…
Of course, the sentiment in this reply could probably have been expressed with far less text and/or syntax (probably in less than a tweet even). IMO people prefer to communicate with some nuance and some degree of redundant expression. Terseness is itself even a kind of nuance when you're allowed to not use it. Drives for widespread purity in language never seem to pan out, in either human human communication or huma…