Finding Expression

McCarthy originally proposed using M-expressions but programmers found S-expressions more valuable.

wikipedia

John McCarthy began developing Lisp in 1958 while he was at the Massachusetts Institute of Technology (MIT). McCarthy published its design in a paper in Communications of the ACM in April 1960, entitled "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". He showed that with a few simple operators and a notation for anonymous functions borrowed from Church, one can build a Turing-complete language for algorithms. Information Processing Language was the first AI language, from 1955 or 1956, and already included many of the concepts, such as list-processing and recursion, which came to be used in Lisp. McCarthy's original notation used bracketed "M-expressions" that would be translated into S-expressions. As an example, the M-expression car[cons[A,B]] is equivalent to the S-expression (car (cons A B)). Once Lisp was implemented, programmers rapidly chose to use S-expressions, and M-expressions were abandoned. M-expressions surfaced again with short-lived attempts of MLisp by Horace Enea and CGOL by Vaughan Pratt. Lisp was first implemented by Steve Russell on an IBM 704 computer using punched cards. Russell had read McCarthy's paper and realized (to McCarthy's surprise) that the Lisp eval function could be implemented in machine code.

chat.openai

Lisp uses S-expressions and not M-expressions because S-expressions are simpler and more flexible, making them easier to parse and manipulate. S-expressions, which stands for Symbolic Expressions, are a simple syntax consisting of nested lists of symbols and other S-expressions. This syntax is easy to read and write, and it allows for the manipulation of code as data, which is a powerful feature of Lisp. In addition, S-expressions can be easily parsed using recursive algorithms, which allows for powerful metaprogramming capabilities, such as macros. M-expressions, on the other hand, are a more complex syntax that was proposed as an alternative to S-expressions. M-expressions use prefix notation with a special character to indicate the start and end of an expression. While M-expressions are more expressive than S-expressions, they are also more difficult to parse and manipulate, which limits their flexibility and metaprogramming capabilities. Overall, the simplicity and flexibility of S-expressions made them a more practical and powerful choice for the development of Lisp. S-expressions allowed Lisp to become a powerful language for metaprogramming and functional programming, and they have influenced the development of many other programming languages, including Scheme, Clojure, and Racket.

wondering

As we explore a fundamental distinction of these expressions, that of space introduced, we become curious about the emergent potential of Whitespace, The Space Between.