• Lisp history: IF, etc.

    From Alan Bawden@alan@csail.mit.edu to comp.lang.misc,comp.lang.lisp on Tue Apr 2 14:38:25 2024
    From Newsgroup: comp.lang.misc

    Kaz Kylheku <643-408-1753@kylheku.com> writes:

    ... The code is from just before MacCarthy invented the ternary IF,
    as a shorthand for a one clause cond: ...

    I don't think that McCarthy invented IF as an abbreviation for COND, but
    I could be wrong. He certainly _could_ have invented it, but if he did,
    it was forgotten by the mid 1970s. Defining IF as a _personal_ macro was common practice for 1970s Lisp programmers, and I don't think IF was
    provided as standard by _any_ major Lisp implementation at that time.
    (Maybe InterLisp did? I don't recall, and I no longer have an InterLisp
    manual on my bookshelf.) Scheme had IF _instead_ of COND, but nobody
    was using Scheme for anything serious yet. And I don't think the T
    project had started at that point.

    In fact, when the Lisp Machine group decided to introduce a standard IF
    macro into Lisp Machine Lisp, we were a bit worried that another
    significant body of Lisp code was already using a slightly different
    syntax for IF than the one we wanted to use. Multics Emacs (written in
    Multics MacLisp) had popularized an IF macro that used an ELSE keyword
    somehow. We negotiated a deal with the Multics guys (Bernie Greenberg)
    where they agreed to change their IF to guarantee that an IF with no
    ELSE keyword would work exactly the same way ours did.

    This was perhaps the very beginning of the road that eventually led us
    to Common Lisp. A bunch of Lisp implementations (Lisp Machine Lisp, NIL
    and both branches of MacLisp) all introduced a bunch of new syntax (IF,
    LET, DEFSTRUCT, SETF, backquote, sharpsign, etc.) into their standard environment so that individual programmers and programs no longer had to
    define them themselves.

    But I'd love to see evidence that McCarthy arrived at ternary IF before
    anyone else. He certainly invented COND, where the interesting thing
    about COND was that it was an _expression_ rather than a statement, so
    we often say that "McCarthy invented the conditional expression". And sometimes that gets shortened to "McCarthy invented the if-expression".
    But I don't think that he ever literally wrote "(IF ...)" rather than
    "(COND ...)".

    I'm not even sure that McCarthy would have seen the advantage of IF over
    COND given that what he originally wanted us all to write was actually
    "[expr -> expr; expr]"!

    - Alan
    --- Synchronet 3.20a-Linux NewsLink 1.114