This week's topic is quite programming heavy, sorry to all non programmers doggirl-gloom

https://xkcd.com/312/

yap

LISP stands for LISt Processing and was invented by John McCarthy, who was looking computation with symbols and recursive functions in the 1960s.

John McCarthy was the son of immigrant Communists (members of the CPUSA), but after witnessing the failed counter-revolution in Prague in 1968, he himself became a Republican lenin-dont-laugh.

A Lisp program consist of a few basic building blocks:

  • Symbols - basically text without whitespace, for example: +, hello123, if, nil, etc.
  • Numbers, Strings, etc.
  • Cons cells - a Pair, denoted as (cons 1 2) or dotted (1 . 2)
  • Lists - a linked list of Cons cells with the final element being the symbol nil.
    • (list 1 2 3) is the same as (1 . (2 . (3 . nil))).

As you may have noticed, cons and list are inside the parentheses, thats because a function call like f(x,y) is written instead as (f x y). This is called a Symbolic expression and all Lisp code looks like this.

(+ 1 (* 2 3) 4)
;; multiply 2 times 3 => (+ 1 6 4)
;; add 1 6 and 4      => 11

;; the names 'car' and 'cdr' are ancient relics from some assembly instructions
;; basically first and second element of a cons cell
;; or head and tail of a list
(car (cons 1 2)) ;; => 1
(cdr (cons 1 2)) ;; => 2

This in turn means that any code can be turned into a list, so that it can be modified like data. I think thats quite neat and unique among programming languages (it even has a fancy word: this property is called homoiconicity).

Functions that operate on code are called macros.

;; generate a function 'name' that adds 'value' to the input
(defmacro defun-adder (name value) 
  (list 'defun name (list 'x) (list '+ 'x value)))
 
(defun-adder plus5 5)
;; define the function plus5(x) as x + 5 
;; => (defun plus5 (x) (+ x 5)))

(plus5 10) ;; => 15

To make sure the interpreter does not try to evaluate a symbol, it needs to be "quoted". Since this comes up quite often, it gets the shortcut of ' at the beginning.

Theyre much nicer to work with than for example macros in C:

#define PI 3.14159265

this C macro just searches and replaces the string PI in the C source code before compilation and theres lots of ways to mess up, for example

#define DOUBLE(x) x + x

if x is a function call that does something else, like printing, then that message will appear twice. Operator prescedence is also not considered: DOUBLE(1) * 3 will expand to 1 + 1 * 3, so 4 not 6 like one would expect.

The last thing I want to yap about is Lisp1 vs Lisp2. This refers to the amount of namespaces any programming language has. if functions and variables are allowed have same names, then there needs to be a namespace for each.

for example in CL:

(defvar x 1)
(defun x () (+ 1 1))

x   ;; variable      => 1
(x) ;; function call => 2

is perfectly fine, while in other languages like Python or C or Scheme this wouldnt work.

Shoutout to respected comrades lilypad and sodium_nitride who are also true Lisp patriots.


___ Join our public Matrix server! https://rentry.co/tracha#tracha-rooms ___

As a reminder, please do not discuss current struggle sessions in the mega. We want this to be a little oasis for all of us and the best way to do that is not to feed into existing conflict on the site. Also, be sure to properly give content warnings and put sensitive subjects behind proper spoiler tags. It's for the mental health of not just your comrades, but yourself as well.

Here is a screenshot of where to find the spoiler button.

spoiler

Common Lisp Logo, an alien holding a flag with the word LISP on it
you are viewing a single comment's thread
view the rest of the comments
[–] 13 points 8 hours ago (4 children)

Three nightmares tonight Jesus. First my family and I had been made homelessnand were living in a school. There was some dark shadow figure. And we were stressed about police finding us. I remember hiding and getting a bad night sleep. Waking up to my things everywhere.

Second dream I'm driving but not well. It's very fuzzy on the logic but the my sister is driving the car in front, me driving what's in back, she loses control, I struggle to stop from hitting her, then from stopping from rear ending a cop, then I can't stop the car so it's a whole car chase.

Then a nightmare where I was stuck in hell one hour a day. My inner self didn't know why this was happening. Every day we got a new person. Se real people, some new. There was a demon who kept trying to beat me up, and would grow strong, then go back to being a little girl so everyome would think she was innocent. Then a demon who would steal and use your voice, they took her voice away. Then my family dog who would attack my legs. There were others that I can't remember. I saw hell, but the actual area was more like series of bookshelves. Very disorienting. That's when I finally was able to wake myself up.

  • source
  • hideshow 4 child comments
  • [–] 6 points 3 hours ago

    Nightmares suck cuddle

    Weirdly enough I usually don't remember my dreams so I guess I also don't remember my nightmares most of the time, but the ones I do are either bonkers, like being teleported to the side of a building that is broken and being pushed by a strange force towards the edge before teleporting back a few meters or a recurring one I have since I was a child (I think I talked about this here on the bear site before) where I'm stuck in a small white room with an old wooden slatted bed base on the left corner of the room, a giant elastic band on the middle of the room, a closed metal door I think, and a humanoid creature with large teeth and claws that is constantly running towards me but the giant elastic never let's them reach me, I'm always stuck halfway from the creature and the bed and then reality starts to warp and I start to zoom in and out of stuff in the room like a corner of the bed, or the slates, or my own ear or the creatures ear, and when that happens, it's not just a zoom, but the point of observation keeps changing sizes while the background becomes infinitely huge.

  • source
  • parent