Що робить обчислення лямбда важливими для дослідження?


10

Наступної осені я розпочинаю бакалавратський курс інформатики, але я не можу зрозуміти λ-числення в контексті функціонального програмування. Я, можливо, неправильно трактую це, але виходячи з цього визначення з Енциклопедії філософії Стенфорда, це лише чергове позначення функцій.

Якщо це як раз те, чому це вигідно використовувати λ-числення над регулярною функцією нотацією для обчислення алгоритму часу виконання?


5
Це не просто "нове позначення функцій", а "перше позначення функцій".
Андрій Бауер

Дякую за пропозицію, @Kaveh. Я буду мати це на увазі для майбутніх постів, проте відповідь Мельвенса відмінна, тому немає необхідності в перехресному посту.

Це формально визначений корпус об'єктів. Я не бачу, у чому ваша точна проблема.
Рафаель

Я не дуже розумів термінологію або чому це робилося, вони робляться у функціональному програмуванні, поки я не дізнався про обчислення лямбда. Це робить програмні конструкції здаватися набагато менш довільними.
dansalmo

Відповіді:


13

В інформатиці ми хочемо проаналізувати та зрозуміти вихідний код з математичною суворістю. Це єдиний спосіб довести цікаві властивості (наприклад, припинення) з абсолютною впевненістю. Для цього нам потрібна мова з дуже чітко визначеним значенням для кожної конструкції.

Теоретично це може бути будь-яка мова з хорошою формальною семантикою . Але щоб зробити речі менш складними та менш схильними до помилок, найкраще використовувати мову, максимально просту, але все ж здатну висловити будь-яку програму (тобто Тьюрінг завершений ). Для міркувань про імперативний код існують машини Тюрінга . Але для міркувань про функціональне програмування існує -рахунок.λ

Основний -рахунок схожий на функціональну мову програмування, але з великою кількістю «багажу» вийнято. Не важливо, щоб це була гарна мова, щоб насправді писати програми, а також не бути ефективною мовою. Тільки, що це просто і виразно. Наприклад, петлі нам не потрібні, оскільки ми можемо імітувати їх за допомогою рекурсії. І нам не потрібні функції з кількома параметрами, оскільки ми можемо імітувати їх за допомогою Currying .λ

Тепер у якийсь момент ви можете довести властивості щодо конструкцій, які не є частиною базового (нетипізованого) -рахунку. Ось чому комп’ютери впродовж років розширювали його в різних напрямках. Наприклад, для міркувань про типові системи існує велика кількість варіантів типізованих λ -калькулів .λλ


3
Імо, деякі інформатики можуть стосуватися розуміння вихідного коду, але твердження, що це правда, загалом звучить як твердження, що фізика - це розуміння ракет з математичною суворістю. інформатика - про обчислення. Пов'язана скарга полягає в тому, що ефективність мови має значення, якщо ви хочете вивчити ефективність та недостатньо сформований вихідний код. У цьому сенсі, можливо, краще думати про ТМ як про спосіб думати про ефективність, а не про модель імперативних мов (і для обох цілей слово RAM може бути кращим вибором)
Сашо Ніколов

btw те, що я написав вище, не означає, що мені не подобається ваша відповідь :)
Сашо Ніколов

Домовились. ;-) Виправлено.
mhelvens

1
Машини Тьюрінга сумніваються в міркуванні про імперативний код, набагато простіше користуватися мовою іграшки, як простою мовою в той же час . stackoverflow.com/questions/507310/the- while-language . Машини Тьюрінга залишаються дуже корисними для розуміння теорії складності.
коді

1

λλ

Якщо це як раз те, чому це вигідно використовувати λ-числення над регулярною функцією нотацією для обчислення алгоритму часу виконання?

Є багато переваг використання Lisp або функціонального програмування та алгоритму обчислення алгоритму - це лише одна можливість (хоча було б корисно, якщо ви посилаєтесь на це). оскільки його функціональні позначення іноді визначають формули часу виконання через індукційні або рецидивні відносини, можуть мати більш сильне або явне відношення до вихідного коду. спрощені також інші типи аналізу алгоритму.

ще одна головна перевага - синтаксична простота. парсери для інших мов дуже складні, але Lisser-парсери дуже прості. тому Лісп - це чудова мова для вивчення теорії розбору в.

Ще один ключовий аспект - це аналіз програмного забезпечення більше з логічного чи математичного об'єктива / виду, а не з "комп'ютерно-наукової" точки зору.

як вказує інша відповідь, у Lisp все стосується рекурсії замість ітерації, а рекурсія лежить в основі CS.

λ

[1] Структура та інтерпретація комп'ютерних програм від Abelson & Sussman

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.