В области компьютерных наук мы хотим анализировать и понимать исходный код с математической строгостью. Это единственный способ доказать интересные свойства (такие как завершение) с абсолютной уверенностью. Для этого нам нужен язык с очень четко определенным значением для каждой конструкции.
Теоретически это может быть любой язык с хорошей формальной семантикой . Но чтобы сделать вещи менее сложными и менее подверженными ошибкам, лучше использовать язык, который настолько прост, насколько это возможно, но все же способен выразить любую программу (т. Е. Завершен ли Тьюринг ). Для рассуждений об императивном коде существуют машины Тьюринга . Но для рассуждений о функциональном программировании существует калькуляция.λ
Базовый калькулятор похож на функциональный язык программирования, но с большим количеством «багажа». Не важно, чтобы это был хороший язык для написания программ, или чтобы он был эффективным. Просто это просто и выразительно. Например, нам не нужны циклы, потому что мы можем имитировать их с помощью рекурсии. И нам не нужны функции с несколькими параметрами, поскольку мы можем имитировать их с помощью Curry .λ
Теперь в какой-то момент вы можете захотеть доказать свойства конструкций, которые не являются частью базового (нетипизированного) вычисления. Вот почему компьютерные ученые расширили его в разных направлениях на протяжении многих лет. Например, для рассуждения о системах типов существует множество вариаций типизированных λ- вычислений .λλ