Nice history lesson. Only critique is on first ALGOL for business: it was ESPOL used for OS of Burroughs B5000 mainframe designed in 1961. They switched to another version later. However, they got plenty of use out of it given Bob Barton’s crew made the CPU implement the ALGOL primitives like bounds, pointer, and argument checks.
The article says that lisp uses apply for initialization and reassignment, which is totally different from any lisp I’ve seen. Is there a different meaning in early proto-lisps for apply than it has now, and did let not exist at that point, or is it a mistake in the article?
I was reading specs for the proto-lisps, back when everybody thought s-expressions were gonna be a temporary stopgap. I don’t remember if they had let but should check in on that, thanks.
I also found this weird, so I was prompted to take a look at what the Lisp 1.5 Manual had to say and found this (page 71):
When a set or a setq is encountered, the name of the variable is located on the a-list. The value of the variable (or cdr of the pairs actually replaced with the new value.
As far as I see, it was published ‘62, but I’d be curious to see where you found apply to be the “setting mechanism”.
For what its worth, I’ve wondered that before, seeing others interpret = as equality and consequently be confused. Thanks for digging this up. And much later I found out about R’s <-. Its a bit more typing but can’t help but think how much less confusion it would cause, especially to beginners.
Smalltalk originally* used a left-arrow glyph ← for the ASCII underscore _ character, and most modern Smalltalks accept _ as an alias for :=. In Smalltalk, = has always meant what it means in math.
which one of its meanings in maths? I know of two: in algebra, = is an assertion of equality (y + 2x = 4; 3x - 2y = -1 for example). In logic calculus, = can be that or it can be a predicate operator that is true when the two sides have the same value.
Fine point! Sometimes I see the former made explicit as ≜ or ≝ or even ≡. That’s closer what Haskell means by =. Notice it’s not commutative. Maybe that’s the origin of the assignment interpretation in programming? The latter (Haskell’s and C’s and most languages’ ==, or Smalltalk’s = ) is an equivalence relation. The two meanings seem pretty closely related to me, under the implicit convention that in algebra we try to only write “true” equation expressions. Operationalizing that assertion of truth within the language itself, rather than at the meta-level (where your instructor might put a red mark on your = and turn it into a ≠) is peculiar to logic… and perhaps thereby programming.
Nice history lesson. Only critique is on first ALGOL for business: it was ESPOL used for OS of Burroughs B5000 mainframe designed in 1961. They switched to another version later. However, they got plenty of use out of it given Bob Barton’s crew made the CPU implement the ALGOL primitives like bounds, pointer, and argument checks.
The article says that lisp uses
applyfor initialization and reassignment, which is totally different from any lisp I’ve seen. Is there a different meaning in early proto-lisps forapplythan it has now, and didletnot exist at that point, or is it a mistake in the article?I was reading specs for the proto-lisps, back when everybody thought s-expressions were gonna be a temporary stopgap. I don’t remember if they had
letbut should check in on that, thanks.I also found this weird, so I was prompted to take a look at what the Lisp 1.5 Manual had to say and found this (page 71):
As far as I see, it was published ‘62, but I’d be curious to see where you found
applyto be the “setting mechanism”.That was the reference I was using, looks like I misread it. Just pushed an update with the correction.
For what its worth, I’ve wondered that before, seeing others interpret
=as equality and consequently be confused. Thanks for digging this up. And much later I found out about R’s<-. Its a bit more typing but can’t help but think how much less confusion it would cause, especially to beginners.This was very interesting and I would enjoying seeing more software history on lobsters.rs.
Smalltalk originally* used a left-arrow glyph
←for the ASCII underscore_character, and most modern Smalltalks accept_as an alias for:=. In Smalltalk,=has always meant what it means in math.(*at least Smalltalk-80, not sure about earlier versions)
which one of its meanings in maths? I know of two: in algebra, = is an assertion of equality (y + 2x = 4; 3x - 2y = -1 for example). In logic calculus, = can be that or it can be a predicate operator that is true when the two sides have the same value.
Fine point! Sometimes I see the former made explicit as ≜ or ≝ or even ≡. That’s closer what Haskell means by =. Notice it’s not commutative. Maybe that’s the origin of the assignment interpretation in programming? The latter (Haskell’s and C’s and most languages’ ==, or Smalltalk’s = ) is an equivalence relation. The two meanings seem pretty closely related to me, under the implicit convention that in algebra we try to only write “true” equation expressions. Operationalizing that assertion of truth within the language itself, rather than at the meta-level (where your instructor might put a red mark on your = and turn it into a ≠) is peculiar to logic… and perhaps thereby programming.
Great!
Now… what about === and !== (in Javascript)?
I think js thought it was doing you a favor by doing type comparisons with double equals. That’s what it implies to me, anyway.