I wish my formal math was stronger. I've been programming for 30 years but once a paper I'm reading starts using math notation I can't parse 90% of it and I'm lost.

The notation used is almost all explicitly defined or can be trivially derived by reading the descriptions provided, aside from cardinality e.g. |x^2 - a| which is assumed to be common knowledge.

Everything else is very simple pseudocode albeit with use of a few Greek letters or symbols, so I could hardly call this inaccessible to somebody who has been programming for 30 years...

are accessible with common knowledge to someone with programming experience but without a background in mathematics?

Jtsummers 56 days ago [-]

The first one isn't really math-heavy, but it is symbol heavy (and there seem to have been some typos in the LaTeX or errors in generation, some subscripts are borked). The actual translation of the first image to Python-esque code is:

I've replaced pi with `predicate` and xi with `some_params`.

The second one, structurally, can also be understood without knowing math but what's actually executed does require some familiarity with math. It's, like above, using a conditional expression described earlier and the lambda notation for defining anonymous functions (to be clear, he also uses it as an example of something that's not quite valid since the name `sqrt` will not be bound inside the lambda, but we can approximate it, invalid multi-line Python lambda incoming):

sqrt = lambda a, x, epsilon: if abs(x*x - a) < epsilon: return x # that is, we've found a close-enough approximation
else: return sqrt(a, (x+a/x)/2, epsilon) # get a closer approximation to the square root

The previous line of code in that section (no lambda) is equivalent to a Python def:

def sqrt(a,x,epsilon):
if abs(x*x-a) < epsilon: return x
else: return sqrt(a, (x+a/x)/2, epsilon)

(NB: All the extra `return`s have to be added because Python is not an expression-oriented language. The language McCarthy is describing is so each expression produces a new value without the need for explicit returns.)

Both of those are there to motivate the introduction of the label form at the bottom of that section.

bidirectional 56 days ago [-]

Yes, you need to not run away as soon as a non-alphanumeric symbol is used. That's hardly even mathematical notation.

user3939382 56 days ago [-]

It’s 100% mathematical notation

lispm 56 days ago [-]

At the same time (1960) there was already a Programmer‘s Manual for Lisp 1. Lisp then had a real implementation with a lot novel stuff like garbage collection, resumeable memory images, code as data, etc.

This text, with minor, mostly typographical, differences had been previously published internally as "MIT AI Lab. AI Memo No. 8" in March 1959.

Two other earlier publications by McCarthy include various very important innovations, e.g. the conditional expressions in "AI Memo No. 1" (September 1958) and the "select" expressions (i.e. what are now named as "case" or "switch") in "AI Memo No. 4" (October 1958).

The text published in CACM in 1960 is the conclusion of the memos written by McCarthy between 1958-09 and 1959-03, when most of the ideas on which LISP is based have been conceived.

The "cond" and "select" expressions and the McCarthy "and" and McCarthy "or" expressions (i.e. C language && and ||) were not only new at that time, but they were much more convenient than the means used for expressing conditional execution in most later programming languages, which had various weird restrictions or peculiar syntax, for no good reason.

Hope this helps.

Everything else is very simple pseudocode albeit with use of a few Greek letters or symbols, so I could hardly call this inaccessible to somebody who has been programming for 30 years...

are accessible with common knowledge to someone with programming experience but without a background in mathematics?

The second one, structurally, can also be understood without knowing math but what's actually executed does require some familiarity with math. It's, like above, using a conditional expression described earlier and the lambda notation for defining anonymous functions (to be clear, he also uses it as an example of something that's

The previous line of code in that section (no lambda) is equivalent to a Python def: (NB: All the extra `return`s have to be added because Python is not an expression-oriented language. The language McCarthy is describing is so each expression produces a new value without the need for explicit returns.)notquite valid since the name `sqrt` will not be bound inside the lambda, but we can approximate it, invalid multi-line Python lambda incoming):Both of those are there to motivate the introduction of the label form at the bottom of that section.

http://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Man...

Two other earlier publications by McCarthy include various very important innovations, e.g. the conditional expressions in "AI Memo No. 1" (September 1958) and the "select" expressions (i.e. what are now named as "case" or "switch") in "AI Memo No. 4" (October 1958).

The text published in CACM in 1960 is the conclusion of the memos written by McCarthy between 1958-09 and 1959-03, when most of the ideas on which LISP is based have been conceived.

The "cond" and "select" expressions and the McCarthy "and" and McCarthy "or" expressions (i.e. C language && and ||) were not only new at that time, but they were much more convenient than the means used for expressing conditional execution in most later programming languages, which had various weird restrictions or peculiar syntax, for no good reason.

> Part II, which never appeared, was to have had some Lisp programs for algebraic computation.