Практическое использование лямбда-исчисления

#lambda-calculus

#лямбда-исчисление

Вопрос:

Недавно я начал самостоятельно изучать лямбда-исчисление. Одна вещь, которую я не могу себе представить, — это то, как этот язык можно использовать для создания практических приложений. Один простой пример использования, который я мог бы придумать, заключается в следующем: предположим, у нас есть записи результатов тестов нескольких учеников в классе. Нравится

 name = John, math=30, science = 40 , english = 60 
name = Jane, math=22, science = 80, english = 45
name = Mark, math=77, science = 43, english = 83
 

Как мы можем написать программу на языке лямбда-исчисления (нетипизированную или просто типизированную), которая вычисляет среднее значение результатов тестов для каждого учащегося?Пожалуйста, обратите внимание, что мой вопрос касается не синтаксического анализа приведенного выше текста, а фактического вычисления ядра.

 Expected output:

name = John, average = 43
name = Jane, average = 49
name = Mark, average = 68

 

Не могли бы вы, пожалуйста, любезно поделиться тем, как это простое вычисление может быть реализовано с использованием лямбда-исчисления?

Несмотря на то, что я мало что знаю о Haskell, я не ищу реализации haskell, но мне любопытно, как это будет сделано в самом лямбда-исчислении.

С наилучшими пожеланиями.

Ответ №1:

Несмотря на то, что лямбда-выражения используются во многих языках программирования, таких как JavaScript и C # (и, конечно, во всех функциональных языках), чистое лямбда-исчисление (и я предполагаю, что это то, на что вы ссылаетесь) не предназначено для использования на практике. Точно так же, как машины Тьюринга не предназначены для каких-либо практических приложений.

Цель лямбда-исчисления — моделировать и рассуждать о природе вычислений. Это включает в себя основополагающие вопросы, такие как вычислимость, эквивалентности и кодировки.

Итак, хотя можно было бы написать выражение лямбда-исчисления, которое выполняет то, что вы просите, это выражение было бы огромным и само по себе не было бы особенно поучительным. Интересно, как будут выглядеть основные строительные блоки такого выражения: как вы кодируете логические значения, логические операторы, условные ветви, целые числа, арифметические операции, списки и операции со списками — и, наконец, рекурсию — в чистом лямбда-исчислении? Как только вы узнаете ответ на эти вопросы, вы в принципе сможете построить выражение, о котором вы просите.