Jak pomocna jest znajomość rachunku lambda? [zamknięte]

Do wszystkich, którzy znają rachunek lambda : Jakie korzyści przyniosło ci to, jeśli chodzi o programowanie? Czy poleciłbyś, żeby ludzie się tego nauczyli?

Author: Gordon Gustafson, 2008-09-22

11 answers

Jeśli chcesz programować w dowolnym funkcyjnym języku programowania, jest to niezbędne. Jak przydatna jest wiedza o maszynach Turinga? Cóż, jeśli piszesz C, paradygmat języka jest dość zbliżony do maszyn Turinga-masz wskaźnik instrukcji i bieżącą instrukcję, a maszyna podejmuje pewne działania w bieżącym stanie, a następnie przechodzi do następnej instrukcji.

W języku funkcjonalnym po prostu nie można tak myśleć - to nie jest język paradygmat. Trzeba pomyśleć o rachunku lambda i o tym, jak są tam oceniane terminy. O wiele trudniej będzie Ci być skutecznym w języku funkcjonalnym, jeśli nie znasz rachunku lambda.

 26
Author: EfForEffort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 12:55:18

Zaletą rachunku lambda jest to, że jest to niezwykle prosty model obliczeń, który jest odpowiednikiem maszyny Turinga. Ale podczas gdy maszyna Turinga jest bardziej jak język asemblacji, rachunek lambda jest bardziej jak język wysokiego poziomu. A jeśli nauczysz się kodowania kościelnego, które pomogą Ci nauczyć się techniki programowania zwanej stylem kontynuacyjno-przekazującym , która jest bardzo przydatna do implementacji wyszukiwania wstecznego i innych fajnych sztuczek.

Główne zastosowanie rachunek lambda w praktyce polega na tym, że jest to świetne narzędzie laboratoryjne do studiowania nowych pomysłów języka programowania . Jeśli masz pomysł na nową funkcję językową, możesz dodać nową funkcję do rachunku lambda i otrzymasz coś, co jest wystarczająco ekspresyjne, aby zaprogramować, a jednocześnie jest wystarczająco proste, aby przestudiować bardzo dokładnie. To zastosowanie jest naprawdę bardziej dla projektantów i teoretyków języków niż dla programistów.

Rachunek Lambda jest też bardzo fajny w własne prawo: podobnie jak znajomość języka asemblacji, pogłębi on twoje zrozumienie obliczeń. Szczególnie fajnie jest zaprogramować uniwersalną maszynę Turinga w rachunku lambda. Ale to jest podstawowa matematyka, a nie praktyczne programowanie.

 77
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-20 23:28:06

Aby być szczerym, nauka rachunku lambda przed programowaniem funkcyjnym uświadomiła mi, że te dwie rzeczy są tak samo niepowiązane jak C z jakimkolwiek imperatywnym programowaniem.

Rachunek Lambda to funkcjonalny język programowania, ezoteryczny, Tarpit Turinga.

Większość funkcjonalnych języków programowania wcale nie wymaga od ciebie "nauki" rachunku lambda, cokolwiek by to nie znaczyło, rachunek lambda jest szalenie minimalny, możesz "nauczyć się" jego aksjomatów w mniej niż godzinę. Aby poznać wyniki z niego, jak twierdzenie fixedpoint, twierdzenie Church-Rossera itd. jest po prostu nieistotne dla programowania funkcyjnego.

Również lambda-abstrakcje są często uważane za 'funkcje', nie zgadzam się z tym, są algorytmami, a nie funkcjami, drobna różnica, większość 'języków funkcyjnych' traktuje swoje funkcje bardziej tak, jak robi to matematyka klasyczna.

Jednak, aby np. efektywnie używać Haskell, musisz trzeba zrozumieć pewne układy typu , czyli niezależnie od rachunku lambda, układ typu F może być stosowany do wszystkich 'funkcji' i nie wymaga w ogóle abstrakcji lambda. Powszechnie w matematyce mówimy f: R^2 - > R: f (x) = x^2. Moglibyśmy powiedzieć: f (x) = X^2:: R - > R - > R. w rzeczywistości Haskell jest dość blisko tej notacji.

Rachunek Lambda jest formalizmem teoretycznym, funkcje Haskella nie są tak naprawdę "abstrakcjami lambda" jak f: f (x) = x^2 naprawdę, co sprawia, że abstrakcje lambda interesujące jest to, że pozwala nam definiować to, co zwykle postrzegane jest jako "stałe" jako "funkcje", żaden język funkcyjny nie robi tego ze względu na ogromne obciążenia obliczeniowe. Haskell i podobnie jest tylko ograniczoną formą systemu typu F stosowanego do funkcji stosowanych w codziennej matematyce klasycznej. Funkcje w Haskell z pewnością nie są anonimowymi formalnie symbolicznymi redukcjami, jak w rachunku lambda. Najbardziej funkcjonalne programowanie języki nie są symbolicznymi systemami zapisu opartego na redukcji. Lispy są w pewnym stopniu, ale jest to paradygmat sam w sobie, a jego 'słowo kluczowe lambda' naprawdę nie zaspokaja nazywania go rachunku lambda.

 21
Author: Zorf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-18 06:16:34

Myślę, że użycie rachunku lambda w odniesieniu do programowania w praktyce polega na tym, że jest to dość minimalny system, który oddaje istotę abstrakcji(lub "funkcje anonimowe" lub zamknięcia, jeśli wolisz). Poza tym nie wydaje mi się to na ogół istotne, chyba że trzeba samemu zaimplementować abstrakcję (jak Tetha (114646) wspomniane).

Ja też zupełnie nie zgadzam się z Denisem Bueno (114701) Kto mówi, że jest to niezbędne do programowania funkcyjnego. Doskonale jest możliwe definiowanie, używanie lub rozumienie języka funkcjonalnego bez żadnego rachunku lambda. Aby zrozumieć ocenę terminów w językach funkcyjnych (co, moim zdaniem, nieco przeczy użyciu języka funkcjonalnego), najprawdopodobniej lepiej będzie nauczyć się Systemów przepisywania terminów.

 15
Author: mweerden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:59

Zgadzam się z tymi, którzy twierdzą, że teoretycznie można nauczyć się programowania funkcyjnego bez uczenia się rachunku lambda-ale jaka jest zaleta nie uczenia się rachunku lambda? To nie jest tak, jakby to wymagało dużej inwestycji czasu.

Najprawdopodobniej pomoże Ci lepiej zrozumieć programowanie funkcjonalne. Ale nawet jeśli nie, to i tak warto się tego nauczyć. Y-combinator to rzecz piękna.

 10
Author: Michael Dorfman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 04:37:07

Jeśli chcesz być tylko Technikiem i pisać programy do robienia rzeczy, to tak naprawdę nie musisz znać lambda-rachunku różniczkowego, maszyn skończonych, automatów pushdown, wyrażeń regularnych,gramatyki bez kontekstu, matematyki dyskretnej itp.

Ale jeśli masz ciekawość na temat głębszych tajemnic leżących u podstaw tych rzeczy, możesz zacząć się zastanawiać, jak można odpowiedzieć na te pytania. Koncepcje są piękne i poszerzą Twoją wyobraźnię. Myślę też, że, nawiasem mówiąc, robią jeden a lepszy praktykant.

Wciągnęła mnie książka Minsky ' ego Computation: Finite and Infinite Machines.

 9
Author: Mike Dunlavey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 13:13:51

Jednym z możliwych sposobów nauki rachunku lambda jest

Http://en.wikipedia.org/wiki/Lambda_Calculus

Lub, jeśli chcesz więcej, Oto mój blog poświęcony rachunku lambda i tym podobnych

Http://weblogs.manas.com.ar/lziliani/

Jak każda abstrakcja obliczeń, za pomocą rachunku lambda można modelować rzeczy używane w większości języków programowania, jak podtypy. Więcej na ten temat, jedna z najlepszych książek z praktycznymi zastosowaniami rachunku lambda w tym sensie jest

Http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=sr_1_1?ie=UTF8&s=books&qid=1222088714&sr=8-1

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 13:06:23

Odkryłem, że rachunek Lambda był przydatny do zrozumienia, jak programowanie funkcjonalne działa na głębszym poziomie. Zwłaszcza jak zaimplementować języki funkcyjne.

Ułatwiło mi to zrozumienie zaawansowanych pojęć, takich jak systemy typów i strategie oceny (np. call by name versus call by value).

Myślę, że nie trzeba nic wiedzieć o rachunku Lambda, aby używać podstawowych technik programowania funkcyjnego. Jednak zrozumienie lambdy kalkulacja ułatwia naukę zaawansowanej teorii programowania .

 4
Author: cdiggins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 00:27:39

Rachunek lambda jest modelem obliczeniowym, podobnie jak maszyna Turinga. Tak więc, jest to przydatne, jeśli trzeba zaimplementować pewien ewaluator dla języka opartego na tym modelu, jednak w praktyce wystarczy podstawowa idea (uh . umieścić argument semantycznie poprawny w ciele funkcji?) i tyle.

 2
Author: Tetha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 12:46:10

Chciałbym również wspomnieć, że jeśli robisz coś w dziedzinie NLP, rachunek lambda jest podstawą ogromnej pracy w semantyce kompozytorskiej.

 2
Author: Robert Elwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-11 06:06:29

Korzyści dla mnie jest bardziej kompaktowe programowanie synergiczne. Rzeczy mają tendencję do przepływu w poziomie bardziej niż w pionie. Dodatkowo jest to bardzo przydatne do prototypowania prostych algorytmów. Nie wiem, czy używam go w pełni, ale uważam, że jest bardzo przydatny.

 0
Author: Nick Berardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 12:45:58