#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 # (и, конечно, во всех функциональных языках), чистое лямбда-исчисление (и я предполагаю, что это то, на что вы ссылаетесь) не предназначено для использования на практике. Точно так же, как машины Тьюринга не предназначены для каких-либо практических приложений.
Цель лямбда-исчисления — моделировать и рассуждать о природе вычислений. Это включает в себя основополагающие вопросы, такие как вычислимость, эквивалентности и кодировки.
Итак, хотя можно было бы написать выражение лямбда-исчисления, которое выполняет то, что вы просите, это выражение было бы огромным и само по себе не было бы особенно поучительным. Интересно, как будут выглядеть основные строительные блоки такого выражения: как вы кодируете логические значения, логические операторы, условные ветви, целые числа, арифметические операции, списки и операции со списками — и, наконец, рекурсию — в чистом лямбда-исчислении? Как только вы узнаете ответ на эти вопросы, вы в принципе сможете построить выражение, о котором вы просите.