Naprawdę czuję, że powinienem nauczyć się Lispa i jest wiele dobrych zasobów, które mi w tym pomogą.
Nie zraża mnie skomplikowana składnia, ale gdzie w „tradycyjnym programowaniu komercyjnym” znalazłbym miejsca, sensowne byłoby użycie go zamiast języka proceduralnego.
Czy istnieje komercyjna zabójcza aplikacja napisana w języku Lisp?
functional-programming
lisp
David
źródło
źródło
Odpowiedzi:
Jednym z głównych zastosowań Lispa jest sztuczna inteligencja. Mój przyjaciel z college'u ukończył kurs AI i dla swojego głównego projektu napisał solver " Lights Out " w Lisp. Wiele wersji jego programu wykorzystywało nieco inne procedury sztucznej inteligencji, a testy na około 40 komputerach dały całkiem niezłe wyniki (chciałbym, żeby było gdzieś online, do którego mógłbym się połączyć, ale nie sądzę).
Dwa semestry temu użyłem Scheme (języka opartego na Lispie) do napisania interaktywnego programu, który symulował rutynę "Who's on First" Abbotta i Costello. Dane wejściowe użytkownika były porównywane z kilkoma dość skomplikowanymi strukturami danych (przypominającymi mapy w innych językach, ale znacznie bardziej elastycznymi), aby wybrać odpowiednią odpowiedź. Napisałem również procedurę rozwiązywania łamigłówki 3x3 (algorytm, który można łatwo rozszerzyć na większe puzzle).
Podsumowując, nauka języka Lisp (lub Scheme) może nie przynieść wielu praktycznych zastosowań poza sztuczną inteligencją, ale jest niezwykle cennym doświadczeniem edukacyjnym, jak twierdzi wielu innych. Programowanie w języku funkcjonalnym, takim jak Lisp, pomoże również w myśleniu rekurencyjnym (jeśli miałeś problem z rekurencją w innych językach, może to być bardzo pomocne).
źródło
Lisp to duży i złożony język, obsługujący duże i złożone środowisko wykonawcze. Z tego powodu Lisp najlepiej nadaje się do dużych i skomplikowanych problemów.
Teraz złożony problem to nie to samo, co skomplikowany . Kompleks problemem jest to jeden z wielu drobnych szczegółów, które jednak nie jest trudne. Pisanie systemu rezerwacji linii lotniczych to skomplikowana sprawa, ale przy wystarczającej ilości pieniędzy i programistach nie jest to trudne. Dostrzeż różnicę?
Skomplikowany problem to taki, który jest zawiły, taki, w którym tradycyjne dzielenie i zdobywanie nie działa. Sterowanie robotem lub praca z danymi, które nie są tabelaryczne (na przykład języki) lub bardzo dynamiczne sytuacje.
Lisp jest naprawdę dobrze dostosowany do problemów, w których rozwiązanie musi być rozszerzalne; klasycznym przykładem jest edytor tekstu emacs. Jest w pełni programowalny, a tym samym stanowi samo w sobie środowisko programistyczne.
W swojej słynnej książce PAIP Norvig mówi, że Lisp jest idealny do programowania eksploracyjnego. To znaczy zaprogramowanie rozwiązania problemu, który nie jest w pełni zrozumiały (w przeciwieństwie do systemu rezerwacji on-line). Innymi słowy: skomplikowane problemy.
Ponadto nauka Lispa przypomni ci o czymś fundamentalnym, o czym zapomniano: różnicę między Von Neumannem a Turingiem. Jak wiemy, model obliczeniowy Turinga jest interesującym modelem teoretycznym, ale bezużyteczny jako model do projektowania komputerów. Z drugiej strony Von Neumann zaprojektował model wykonywania komputerów i obliczeń: model Von Neumanna. Kluczowe dla modelu Von Neumanna jest to, że masz tylko jedną pamięć i przechowujesz tam zarówno swój kod, jak i dane. Zwróć uwagę, że program w języku Java (lub C #, czy cokolwiek lubisz) jest przejawem modelu Turinga. Ustawiasz swój program w konkretny sposób, raz na zawsze. W takim razie masz nadzieję, że poradzisz sobie ze wszystkimi danymi, które zostaną na niego wyrzucone.
Lisp utrzymuje model Von Neumana; nie ma ostrej, z góry określonej granicy między kodem a danymi. Programowanie w Lispie otwiera twój umysł na potęgę modelu Von Neumanna. Programowanie w Lispie sprawia, że widzisz stare koncepcje w nowym świetle.
Wreszcie, będąc interaktywnym, nauczysz się współdziałać ze swoimi programami podczas ich tworzenia (w przeciwieństwie do kompilowania i uruchamiania). Zmienia to również sposób programowania i sposób patrzenia na programowanie.
Tym wstępem mogę wreszcie odpowiedzieć na Twoje pytanie: czy znajdziesz miejsca, w których przyćmiewa „tradycyjne” języki?
Jeśli jesteś zaawansowanym programistą, potrzebujesz zaawansowanych narzędzi. Nie ma bardziej zaawansowanego narzędzia niż Lisp. Lub innymi słowy: odpowiedź brzmi: tak, jeśli twoje problemy są trudne. Nie inaczej.
źródło
W odpowiedzi na @lassevk :
źródło
skomplikowana składnia ?
Składnia lisp jest niezwykle prosta .
Zabójcza aplikacja napisana w języku lisp: emacs . Lisp pozwoli ci dowolnie rozszerzać emacsa, aby zrobić prawie wszystko, co przyjdzie do głowy, że mógłby zrobić edytor.
Ale powinieneś się uczyć seplenienie tylko wtedy, gdy chcesz , i możesz nigdy nie używać w pracy, ale nadal jest niesamowity.
Dodam też: nawet jeśli znajdziesz miejsca, w których seplenienie będzie miało sens, prawdopodobnie nikogo nie przekonasz, że powinno się go używać na Javie, C ++, C #, Pythonie, Ruby itp.
źródło
Nie mogę odpowiedzieć z własnego doświadczenia, ale powinieneś przeczytać to, co Paul Graham napisał na Lispie . Jeśli chodzi o część „zabójcza aplikacja”, przeczytaj artykuł Pokonywanie średniej .
źródło
W Lispie profesjonalnie programowałem przez około rok i na pewno warto się tego nauczyć. Będziesz miał niezrównaną możliwość usunięcia nadmiarowości ze swojego kodu, będąc w stanie zastąpić cały standardowy kod funkcjami, jeśli to możliwe, i makrami, jeśli nie. Będziesz mieć również dostęp do niezrównanej elastyczności w czasie wykonywania, swobodnie tłumacząc kod i dane. Zatem sytuacje, w których działania użytkownika mogą wywołać potrzebę dynamicznego budowania złożonych struktur, są tym, w których Lisp naprawdę błyszczy. Popularne harmonogramy lotów linii lotniczych są napisane w Lisp, a także w Lisp jest dużo CAD / CAM.
źródło
Jeśli lubisz programować, powinieneś nauczyć się Lispa dla czystej przyjemności. XKCD doskonale wyraża intelektualne oświecenie, które następuje. Nauka Lispa jest dla programisty tym, czym medytacja jest dla buddyjskiego mnicha (i miałem na myśli to bez bluźnierczych konotacji).
źródło
Lisp jest bardzo przydatny do tworzenia małych DSL. Mam kopię Lisp in a Box działającą w pracy i napisałem małe DSL do przeszukiwania baz danych serwera SQL i generowania warstw danych itp. W C #. Cały mój kod płyty kotłowej jest teraz zapisywany w makrach lisp, które są wyświetlane w języku C #. Generuję przy jego pomocy HTML, XML i wiele innych rzeczy. Chociaż chciałbym móc używać Lispa do codziennego kodowania, Lisp może przynieść praktyczne korzyści.
źródło
Każdy język wygląda o wiele trudniej, gdy nie używa się typowych dla danego języka konwencji wcięć. Kiedy podążamy za nimi w Lispie, widać, jak łatwo wyraża on strukturę drzewa składni (uwaga, to nie jest do końca w porządku, ponieważ podgląd trochę kłamie; r powinny być wyrównane z fns w rekursywnym argumencie quicksort):
źródło
let
i użyćdefun
na początku funkcji, aby zdefiniować,fn
ponieważ się nie zmienia.Odkryłem, że nauka nowego języka zawsze wpływa na Twój styl programowania w językach, które już znasz. Zawsze powodowało to, że myślałem na różne sposoby, aby rozwiązać problem w moim podstawowym języku, którym jest Java. Myślę, że ogólnie rzecz biorąc, to po prostu poszerza twoje horyzonty w zakresie programowania.
źródło
Jeśli musisz zadać sobie pytanie, czy powinieneś nauczyć się seplenienie, prawdopodobnie nie musisz.
źródło
W latach osiemdziesiątych wziąłem udział w kursie seplenienia w college'u. Pomimo grokking wszystkie koncepcje przedstawione w klasie, ja zostałem bez jakiegokolwiek uznania dla tego, co sprawia, że lisp Great. Obawiam się, że wiele osób postrzega seplenienie jako kolejny język programowania, co zrobiło dla mnie ten kurs na studiach wiele lat temu. Jeśli zobaczysz, że ktoś narzeka na składnię seplenienia (lub jej brak), istnieje duża szansa, że jest jedną z tych osób, którym nie udało się pojąć wielkości seplenienia. Byłem jedną z tych osób przez bardzo długi czas.
Dopiero dwie dekady później, kiedy na nowo rozbudziłem zainteresowanie seplenieniem, zacząłem „rozumieć” to, co sprawia, że seplenienie jest interesujące - w każdym razie dla mnie. Jeśli uda ci się nauczyć seplenienie bez rozmywania umysłu przez domknięcia i makra seplenienie, prawdopodobnie przegapiłeś punkt.
źródło
Nauka języka LISP / Scheme może nie zwiększyć przestrzeni aplikacji, ale pomoże ci lepiej zrozumieć programowanie funkcjonalne, jego zasady i wyjątki.
Warto poświęcić trochę czasu, aby poznać różnicę w pięknie sześciu zagnieżdżonych czystych funkcji i koszmar sześciu zagnieżdżonych funkcji z efektami ubocznymi.
źródło
Z http://www.gigamonkeys.com/book/introduction-why-lisp.html
źródło
„Lisp jest wart nauki dla głębokiego doświadczenia oświecenia, jakie będziesz mieć, kiedy w końcu go zdobędziesz; to doświadczenie uczyni z ciebie lepszego programistę na resztę swoich dni, nawet jeśli tak naprawdę nigdy nie używasz zbyt często samego Lispa”.
- Eric S. Raymond, „Jak zostać hakerem”
http://www.paulgraham.com/avg.html
źródło
Zgadzam się, że Lisp jest jednym z tych języków, których nigdy nie wolno używać w celach komercyjnych. Ale nawet jeśli tego nie zrobisz, nauczenie się tego zdecydowanie poszerzy twoje zrozumienie programowania jako całości. Na przykład nauczyłem się Prologu na studiach i chociaż nigdy go później nie używałem, pozwoliłem sobie lepiej zrozumieć wiele koncepcji programowania i (czasami) bardziej docenić języki, których używam.
Ale jeśli masz się tego nauczyć ... koniecznie przeczytaj artykuł On Lisp
źródło
Nauka lisp sprawi, że Javascript w zupełnie innym świetle! Lisp naprawdę zmusza cię do zrozumienia zarówno rekurencji, jak i całości „funkcji jako obiektów pierwszej klasy” - paradygmatu. Zobacz doskonały artykuł Crockforda na temat Scheme vs Javascript . Javascript jest obecnie prawdopodobnie najważniejszym językiem, więc jego lepsze zrozumienie jest niezwykle przydatne!
źródło
Gimp's Script-Fu jest wargowy. To aplikacja do zabijania w Photoshopie.
źródło
Okej, może i jestem dziwny, ale naprawdę nie lubię esejów Paula Grahama tak bardzo, a Lisp to naprawdę trudna książka, jeśli nie masz jeszcze pojęcia o Common Lisp. Zamiast tego powiedziałbym, że wybierzesz Siebel's Practical Common Lisp . Jeśli chodzi o „zabójcze aplikacje”, Common Lisp wydaje się znajdować swoje miejsce w niszowych sklepach, takich jak ITA , więc chociaż nie ma aplikacji będącej synonimem CL, tak jak Rails dla Rubiego, są miejsca w branży, które go używają, jeśli to robisz trochę kopania.
źródło
Skomplikowana składnia? Piękno seplenienia polega na tym, że ma śmiesznie prostą składnię. To tylko lista, gdzie każdy element listy może być inną listą lub podstawowym typem danych.
Warto się tego nauczyć ze względu na sposób, w jaki poprawia zdolność kodowania do myślenia o funkcjach i ich używania jako po prostu innego typu danych. Poprawi to sposób, w jaki kodujesz w języku imperatywnym i / lub zorientowanym obiektowo, ponieważ pozwoli Ci być bardziej elastycznym mentalnie w zakresie struktury kodu.
źródło
Aby dodać do innych odpowiedzi:
Ponieważ kurs SICP (filmy są dostępne tutaj ) jest niesamowity: uczy języka Lisp i wiele więcej !
źródło
Zabójcza aplikacja? Franz Inc. ma długą listę historii sukcesu , ale ta lista obejmuje tylko użytkowników AllegroCL ... Są prawdopodobnie inni. Moją ulubioną jest historia o Naughty Dog , ponieważ byłem wielkim fanem gier Crash Bandicoot.
Do nauki języka Common Lisp polecam Practical Common Lisp . Ma praktyczne podejście, które przynajmniej dla mnie sprawiło, że było to łatwiejsze niż w przypadku innych książek, które przeglądałem.
źródło
Możesz dziś użyć Clojure do pisania testów i skryptów na maszynie wirtualnej Java. Chociaż istnieją inne języki Lisp zaimplementowane w JVM, myślę, że Clojure najlepiej radzi sobie z integracją z Javą.
Są chwile, kiedy język Java sam przeszkadza w pisaniu testów kodu Java (w tym „tradycyjnego programowania komercyjnego”). (Nie mam na myśli tego, że jako oskarżenie Javy - inne języki mają ten sam problem - ale to fakt. Ponieważ temat, a nie Java, nie będę się rozwijał. Zapraszam do rozpoczęcia nowego tematu, jeśli ktoś chce o tym porozmawiać.) Clojure eliminuje wiele z tych przeszkód.
źródło
Lisp może być używany wszędzie tam, gdzie używasz tradycyjnego programowania. Nie różni się tak bardzo, jest po prostu potężniejszy. Piszesz aplikację internetową? możesz to zrobić na Lispie, pisząc aplikację desktopową? możesz to zrobić na Lispie, cokolwiek, prawdopodobnie możesz to zrobić na Lispie, Pythonie lub jakimkolwiek innym programowaniu ogólnym (jest kilka języków, które nadają się tylko do jednego zadania).
Największą przeszkodą będzie prawdopodobnie akceptacja twojego szefa, twoich rówieśników lub klientów. To jest coś, z czym będziesz musiał z nimi pracować. Wybór pragmatycznego rozwiązania, takiego jak Clojure, które może wykorzystać aktualną bazę instalacyjną infrastruktury Java, od maszyny JVM po biblioteki, może Ci pomóc. Ponadto, jeśli masz program Java, możesz stworzyć architekturę wtyczek i napisać dla niego wtyczki Clojure, a następnie napisać połowę kodu w Clojure.
źródło
Nie ma powodu, ale (trywialne) AutoCAD obsługuje środowiska wykonawcze LISP i DCL. Jest to wygodny sposób pisania złożonych makr (w tym automatyzacji ActiveX), jeśli nie chcesz używać języka VBA lub ich zestawów SDK C ++ lub .NET lub jeśli wyrażenie języka DIESEL go nie wycina.
Wiele funkcji programu AutoCAD to w rzeczywistości procedury LISP.
źródło
To temat, nad którym sam się chwilę zastanawiałem, ale nie do końca podjąłem decyzję, jak zwykle czas jest głównym problemem ...;)
A ponieważ nie mogę znaleźć tych linków w tym poście, dodaję je w interesie publicznym:
Historia sukcesu i porażki : Lisping w JPL
Naprawdę imponująca historia sukcesu: Lisp używany w korporacji Orbitz
Porównanie i analiza, czy używać Lispa zamiast Java: Lisp jako alternatywy dla Java
źródło
Składnia nie ma znaczenia, czytelność nie!
źródło
Nie mówię, że to zabójcza aplikacja, ale wygląda na to, że może być fajna http://code.google.com/p/plop/
źródło
Zabójcza aplikacja? Jedną jest wyszukiwarka lotów firmy ITA Software.
Jeśli chodzi o „dlaczego”, najprawdopodobniej uczyni cię to lepszym programistą i jest bardzo mało prawdopodobne, że uczyni cię gorszym. Może jednak sprawić, że wolisz dialekty seplenienie od innych języków.
źródło