I was studying the book Structure and Interpretation of Computer Programs and in section 1.1.5 The Substitution Model for Procedure Application the author explains the concepts of normal order and applicative order, which I believe I have understood well.
Now, I am taking a course on Coursera called Function Programming Principles in Scala and there the professor Martin Odersky (who based much of his course in the book cited above) explains the same concepts under the names of call-by-name and call-by-value.
In his course, professor Odersky says the substitution model is based on the Lambda Calculus, so I consulted a book on my library An Introduction to Functional Programming Though Lambda Calculus and in page 22, the author does define the terms as applicative order and normal order. Interestingly in his definition he says that applicative order is like Pascal's call-by-value whereas normal order is like Algol's call-by-name.
The use of the words "is like" in his explanation is what made me doubt. Thus my questions:
- Are these two terms equivalent or are there any subtle differences?
- Can I use one or the other interchangeably without risking making a mistake in the meaning they convey?
- Are there any reasons you know about that justify the existence of different terminology to refer to the same thing?