1

Слышал, что для программиста очень важно понимать машину Тьюринга и лямбда-исчисление. Нашел несколько книжек, где описывается лямбда-исчисление. Скажите пожалуйста, эти знания реально могут пригодиться на практике? По мне, единственное что действительно полезно про машину Тьюринга - это Тьюринг полнота (что бы понимать, что на html не решишь вычислительных задач). С лямбда-исчислением сложнее - оно положено в основу функциональных языков программирования. И там есть такие важные концепции как анонимные функции, ФВП, каррирование.. Но неужели это нельзя объяснить простым языком? Что вот, ФВП - функция, которая может принимать в качестве аргумента функцию и возвращать тоже функции и т.д про другие концепции. В общем, вопрос скорее такой: Не являются ли все эти сложные формулы и книги про лямбда-исчисление уделом исключительно теоретиков? И если нет, то как могут быть применены на практике?

  • все лямбда-исчисление знать не надо. на практике вам надо понимать что делает, например, такой код: Func<int, int> f = v => v * 2; void Run(Func<int, int> f) { Console.WriteLine(f(2)); } Run(f); – Stack Jan 25 '16 at 09:48
  • @Stack Это C#? А понять поможет изучение лямбда-исчисления как раз? Мне кажется что тут скорее вопрос синтаксиса конкретного языка, разве нет? – Александр Елизаров Jan 25 '16 at 09:55
  • @Grundy, разве это не то что я говорю? Там на конкретных примерах и достаточно простым языком объясняют вещи, которые в книжках объясняются какими то страшными формулами – Александр Елизаров Jan 25 '16 at 09:59
  • @АлександрЕлизаров, вы просили практическое применение - по ссылке как раз оно и есть – Grundy Jan 25 '16 at 10:00
  • @АлександрЕлизаров "Это C#?" -- да. "тут скорее вопрос синтаксиса конкретного языка, разве нет?" -- тоже самое можно сделать, например, на typescript/javascript, f#. надо просто понимать, что у функции может не быть имени, что функцию можно вернуть из функции и можно функцию передать как параметр в другую функцию. – Stack Jan 25 '16 at 10:00
  • @Grundy, может я конечно немного некорректно вопрос задал.. но что вы понимаете под практическим применением? То что можно написать функцию высшего порядка, анонимные функцию и т.д. на разных языках программирования - это понятно) У меня вопрос, помогают ли как то на практике все эти сложные формулы, термы и т.п. из лямбда-исчисления? Например, я пишу на Scheme небольшие программки вообще не задумываясь об этих формулах. Мне достаточно знать что для объявления анонимной функции надо написать лямбда, что ее можно передать в другую функции или вернуть как результат и т.д. – Александр Елизаров Jan 25 '16 at 10:07
  • все зависит от задачи – Grundy Jan 25 '16 at 10:08
  • @АлександрЕлизаров "Но неужели это нельзя объяснить простым языком?" -- можно, но это сложно. проще городить огороды из заумных терминов. как пример, посмотрите тут http://chat.stackexchange.com/rooms/33871/discussion-on-question-by-evgeniy-miroshnichenko----- – Stack Jan 25 '16 at 10:21
  • Для практики вроде и не нужно. В общем случае для практики достаточно только понимания трансляции виртуальных адресов в физические, прерываний и как работают машинные инструкции. А в частности, например, для понимания, как работает *nix достаточно понимать работу open,close,read,write,fork и exec. Остальное выводится. – avp Jan 25 '16 at 10:34
  • @АлександрЕлизаров Лично я про машину Тьюринга и вообще конечные автоматы прочитал где то полгода назад. Оказалось, что некоторые мои лексичекие анализаторы работают по таким же принципам. Сейчас посмотрел лямбда-исчисления ... Как по мне, незнание этих вещей в теории, совершенно не мешает мне использовать их на практике :) – Mike Jan 25 '16 at 10:37
  • @Mike, а где это еще на практике применяется можете рассказать?) Это самое интересное для меня – Александр Елизаров Jan 25 '16 at 10:45
  • @АлександрЕлизаров Для этого мне сначала надо въехать в это лямбда-исчисление. ломает. А по поводу Тьюринга и КА, да оно на каждом шагу, по мне так это просто способ научить молодых программистов основам пошаговых алгоритмов. – Mike Jan 25 '16 at 10:56
  • @Mike, понял, спасибо) Что такое КА подскажите пожалуйста?) – Александр Елизаров Jan 25 '16 at 11:00
  • @АлександрЕлизаров КА = Конечный автомат. Мне когда один теоретик долго про них загонял я все никак не мог понять зачем это, если оно как бы само собой разумеется :) – Mike Jan 25 '16 at 11:05
  • @Mike, точно, конечный автомат, спасибо) – Александр Елизаров Jan 25 '16 at 11:27

0 Answers0