O significado das palavras não é fixo, mas posso lhe dar minha interpretação.
Um cálculo é algo com o qual calculamos no sentido de equações de malabarismo (pense na manipulação das séries de Taylor ou no cálculo de integrais na análise). Um cálculo nos diz quais são as regras de manipulação, mas não quais devemos usar em uma determinada situação.
Uma linguagem de programação é algo que nos diz como calcular. Ele nos diz exatamente como usar as regras. Normalmente, deixamos o computador usar as regras, pois é muito mais rápido. As regras podem ser não determinísticas e pode haver boas razões para serem não determinísticas. Pode ser da natureza do cálculo que ele não é determinista (pense em processos de comunicação simultâneos) ou a fixação de uma estratégia específica pode ser prejudicial às técnicas de implementação e otimização.
Por exemplo, o cálculo é uma teoria equacional . Existem expressões e equações nos dizendo quando as expressões são iguais. As equações não nos dizem como aplicá-las, embora as pessoas usem agendas ocultas e apresentem as equações para que mais tarde possam derivar estratégias úteis de avaliação. Mas, em sua essência, o λ- cálculo é um monte de equações. Não é uma linguagem de programação.λλ
Por outro lado, o ML padrão é uma linguagem de programação. É dado em termos de semântica operacional, isto é, regras de computação. Existem noções derivadas de igualdade (equivalência contextual, equivalência observacional etc.) que podemos colocar em cima dela para pensar nela como uma espécie de cálculo.
Obviamente, existem frequentemente conexões úteis entre um cálculo e sua manifestação como uma linguagem de programação. A normalização de confluentes é apenas uma maneira de passar do cálculo para a linguagem de programação (embora, infelizmente, algumas pessoas tenham feito disso uma espécie de religião). A interação entre os cálculos e as linguagens de programação é importante: as linguagens de programação podem realmente ser usadas, mas os cálculos explicam o que são os programas.
Apenas para irritar as pessoas, deixe-me também afirmar que fingir que não há diferença entre um cálculo e sua manifestação operacional às vezes leva a visões distorcidas da programação e mini-religiões na comunidade de programação. Você pode tentar adivinhar qual idioma eu tenho em mente. (É uma linguagem muito legal!)