Zamknięte . To pytanie jest
oparte na opiniach . Obecnie nie przyjmuje odpowiedzi.
Komentarze
Odpowiedź
Proponuję nauczyć się obu, najpierw Haskell, a potem Common Lisp. Moje doświadczenie z Haskellem było takie, że statyczne pisanie początkowo wydawało się ograniczającą irytacją, ale kiedy się do tego przyzwyczaiłem, zauważyłem, że większość moich błędów typu zawierała błędy logiczne. Kiedy dojdziesz do tego punktu i do następnego kamienia milowego, którym jest nauka myślenia w typach i definiowania własnych typów jako sposobu wyrażania swojego rozwiązania, będziesz gotowy na Common Lisp.
Z Common Lisp, możesz dodawać monady, curry i wszystko, co lubisz od Haskella, ale otrzymujesz również wielokrotne dziedziczenie, jak wspomniał Frank Shearar, oraz funkcje ogólne z wieloma wysyłkami i zaawansowanym systemem obsługi wyjątków.
Więc dlaczego nie tylko nauczyć się języka Common Lisp jako pierwszy? Wychodząc ze środowiska proceduralnego i OOP, moje doświadczenie jest takie, że tak naprawdę nie rozumiałem programowania funkcjonalnego, dopóki nie musiałem go używać wyłącznie. Gdy programowanie funkcjonalne stanie się wygodne, możesz dodać pozostałe narzędzia udostępnione przez Common Lisp i użyć dowolnego narzędzia, które jest najlepsze do wykonania zadania.
Komentarze
Odpowiedz
I proszę.
Haskell uczy najczystszych FP, o ile wiem przynajmniej, tak jak Smalltalk uczy najczystszego z OO. (wspominam o tym nie po to, aby sugerować, że OO i FP nie mogą się żenić, ale ponieważ oba te języki są językami „klejnotów” – podstawowa idea doprowadzona do skrajności.)
Lisp jest naprawdę rodziną języków, więc opowiem o Common Lisp, ponieważ jest to konkretny członek rodziny, którego używam.
Lisp wciąż będzie miał wiele do nauczenia:
- Jest to wieloparadygmat, więc dsimcha wskazuje to „pokaże ci jak zintegrować FP z innymi paradygmatami.
- Lisp nauczy Cię, że „kod-to-dane, dane-to-kod”, na przykład poprzez swoje makra.
- CLOS to bardzo interesująca marka OO, z wieloma działającymi dziedziczeniami i funkcjami ogólnymi.
Odpowiedź
Haskell i Lisp to dwie zupełnie różne bestie.
Haskell to coś w rodzaju „czystego programowania funkcjonalnego w wieży z kości słoniowej”
Lisp to coś w rodzaju „kod-to-dane / dane-to-kod / twórz własne konstrukcje językowe”. Możesz manipulować swoim kodem w dowolny sposób, jaki możesz sobie wyobrazić.
Są bardzo różne. Oba mają wspólny aspekt „programowania funkcjonalnego”, ale jest to naprawdę mały wspólny punkt w porównaniu z różnicami. Po prostu wypróbuj je, a zobaczysz, jak bardzo się różnią!
Komentarze
Odpowiedź
Nauka Lispa później pozwoli ci dostosować Emacsa, który jest prawdopodobnie najbardziej zaawansowanym dostępnym edytorem tekstu. Nie możesz tego zrobić w Haskell.
Komentarze
Odpowiedź
Główną korzyścią, jaką widzę z nauki Lispa, jest nauczenie się, jak zintegrować FP z prawdziwym – zorientowany na świat język wieloparadygmatowy, zamiast uczyć się go tylko w kontekście języka akademickiego, który kładzie nacisk na czystość.
Komentarze
Odpowiedz
Również wywodzę się z C / C ++ / Pythona i kilka razy wypróbowałem FP w ciągu ostatnich kilku lat. Początkowo patrzyłem na Haskella i nie mogłem się z tym pogodzić, potem wypróbowałem Ocaml, ale nie poszedłem dalej. W końcu zacząłem słyszeć dobre rzeczy o Scali, wypróbowałem go i stwierdziłem, że bardzo mi odpowiada (w przeszłości robiłem też trochę Javy), do tego stopnia, że po roku parania się Scala (i wysyłania 161 Projekt Euler ma z tym problemy), Haskell wydaje się mieć dużo więcej sensu. Właściwie właśnie zamówiłem kilka książek o Haskellu i chcę spróbować jeszcze raz, chociaż jest to w dużej mierze motywowane istnieniem Scalaz.
Więc znalazłem użycie języka wieloparadygmatycznego (np. Scala, ale Lisp prawdopodobnie też pasowałby do rachunku) dobry sposób na FP. Ale jeśli „lubisz zagłębiać się w Haskell (ja nie byłam), zrób to.
Komentarze
Odpowiedź
Pierwotnie wywodziłem się z C / C ++ / Ruby i używałem koncepcji FP w Rubim, kiedy tylko mogłem. Stan po prostu trochę zranił mój mózg. Jeden z moich kumpli zadzwonił do mnie pewnego dnia i poprosił mnie o napisanie czegoś w Haskell (moja pierwsza – i mam nadzieję, że nie ostatnia – praca w Haskellu!). Szybko nauczyłem się języka i wrzuciłem razem coś, co działało. Nie był piękny ani nic, ale działał.
Zrobiłem miesięczną przerwę od Haskella, ponieważ nie miałem do czego go wykorzystać. Ale kiedy zdecydowałem, że muszę napisać własne oprogramowanie do blogów, użyłem Haskell ( https://symer.io ). Haskell jest naprawdę fajny, ponieważ możesz podzielić problem na części i zaimplementować te części inaczej, w zależności od danych wejściowych. Haskell również bardzo dobrze radzi sobie z porażkami dzięki inteligentnemu zestawieniu wartości. Jest tak wiele narzędzi do pracy z tymi skrzynkami, że po prostu zapominasz, że istnieją.
Moje doświadczenia z lispem (Scheme) były całkowicie negatywne. Język nie tylko nie posiadał tych inteligentnych, prostych narzędzi, ale wydawał się równie niebezpiecznie luźny jak Ruby czy JavaScript. To było okropne doświadczenie i nie oferuje nic nowego poza Rubim i Pythonem.
C ++ nie może powstrzymać Haskella poza zarządzaniem pamięcią. Haskell jest równie szybki (jeśli nie szybszy), znacznie bardziej zwięzły i znacznie bezpieczniejszy. Ale bezpieczeństwo Haskella nigdy nie wchodzi w grę sposób.
TL; TR Haskell to powiew świeżego powietrza, a Lisp to nieco bardziej funkcjonalny Ruby.