Jestem programistą C ++ próbującym nauczyć się Common Lisp. Przejrzałem kilka książek, takich jak Land of Lisp i przeczytałem wiele artykułów online o różnych zaletach Lispa. Potrzebuję jednak porady.
Prawie wszystko, co przeczytałem o Common Lisp, wiąże się z tym, jak niesamowity jest on i jak niesamowicie szybko można z nim robić rzeczy i jak niesamowicie rozwiązał wiele problemów ze współczesnymi językami programowania 30 lat temu. Poza tym, jak niesamowite są makra i jak każdy paradygmat programowania (OO, funkcjonalny, oparty na aktorach itp.) Może być użyty w Lispie i jak listy są ostateczną strukturą danych. Zasadniczo traktując Lispa jako język badawczy i mówiąc, jak bardzo jest inny i rewolucyjny.
I wszystko to prawdopodobnie jest prawdą, ale problem polega na tym, że nie widziałem zbyt wielu rzeczy, jak robić praktyczne rzeczy, takie jak czytanie pliku i dzielenie go na słowa i przetwarzanie na nim. Nie jestem zainteresowany nauką Common Lisp ze względu na naukę Common Lisp, ale ze względu na to, że rzeczy, które robiłem w C ++, były wykonywane szybciej i z mniejszą liczbą błędów.
Moje pytanie brzmi więc, jakie jest najlepsze źródło (czy to strona internetowa, książka, cokolwiek), które koncentruje się na nauczaniu używania Common Lisp do wykonywania typowych zadań programistycznych, takich jak
- Jak czytać pliki
- Jak czytać plik, zamieniać słowa w pliku i zapisać wynik z powrotem do pliku
- Iteruj pliki w katalogu i innych elementach systemu plików
- Interakcja z bazą danych SQL
- Komunikuj się przez gniazda
- Tworzenie wątków dla rzeczy takich jak serwer WWW
- Twórz GUI
- Wykonuj operacje na plikach binarnych
- Napisz parser (nie interpreter Lispa w Lisp, co, jak rozumiem, jest jak 5 linii Lispa)
- Interakcja z systemem operacyjnym (tj. Rzeczy napisane w C lub C ++), aby robić rzeczy, których Lisp nie może robić natywnie
- Jak pisać rozszerzenia Lisp w C (czy to możliwe?)
- Osadź interpreter lua (czy to możliwe?)
A także mniej od razu praktyczna uwaga, jak zaimplementować wspólne struktury danych w lispie, takie jak sterta, stos, drzewo wyszukiwania binarnego itp. Jednak może to być po prostu użycie operacji listowych Lispa w taki sam sposób car
i cdr
we właściwy sposób. Nie wiem
Bardzo wątpię, czy cokolwiek z tego (z nieprawdopodobnym wyjątkiem dwóch ostatnich na liście) jest niemożliwe w przypadku Lispa lub ludzie nie pokochaliby tego tak bardzo. A wyżej wymienione rzeczy, które przeczytałem, wspominają o wielu prawdziwych programach napisanych w Lisp (przychodzi na myśl sklep internetowy Yahoo!).
Jednak mając programowanie w ( tym? ) Języku imperatywnym wcześniej, nie mogę się doczekać wykorzystania nowej wiedzy, którą otrzymam, do pisania aplikacji w świecie rzeczywistym. Jaki jest więc najszybszy sposób na naukę pisania praktycznego oprogramowania za pomocą Lispa?
Nawiasem mówiąc, widziałem Praktyczny Common Lisp Petera Seibela, ale sądząc po TOC, porusza on tylko niektóre rzeczy, których chciałbym się nauczyć używać Lispa.
Jeszcze jedno pytanie, jeśli mogę (przepraszam, jeśli jest to połączenie dwóch pytań w jedno), gdzie mogę znaleźć odniesienie do funkcji i rzeczy Lispa?
I naprawdę chcę polubić Lispa.
źródło
Odpowiedzi:
Proponuję przeczytać „ Practical Common Lisp ”, ponieważ zawiera ona już odpowiedzi na niektóre z Twoich pytań.
Prawdopodobnie powinieneś przeczytać trzy do czterech książek :
Common Lisp Reference
Instrukcje
Teraz następną rzeczą, którą powinieneś sprawdzić, jest podręcznik implementacji Lispa. Opisuje wiele konkretnych rozszerzeń: sieci, wątki, ...
Dokumentacja dla implementacji Common Lisp:
SLIME (oparty na Emacs Lisp-IDE) ma SLIME User Manual .
Dokumentacja dla bibliotek Common Lisp:
Biblioteki
W przypadku bibliotek użyj
Spójrzmy teraz na niektóre z Twoich punktów:
Zobacz słownik plików i strumieni w HyperSpec . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...
Użyj powyżej. Zobacz też: NAPISZ i pokrewne.
Patrz wyżej. KATALOG, nazwy ścieżek, ...
Użyj na przykład biblioteki CLSQL.
Zobacz instrukcję swojego Lispa lub użyj jednej z przenośnych bibliotek. Zobacz Quicklisp.
Zobacz instrukcję swojego Lispa lub użyj jednej z przenośnych bibliotek. Zobacz Quicklisp.
Zależy. Zobacz Quicklisp lub bibliotekę specyficzną dla implementacji.
Aby uzyskać informacje o operacjach na plikach i strumieniach, zobacz Hyperspec. WRITE-BYTE, READ-BYTE. Otwórz strumień jako strumień binarny.
Użyj do tego jednego z istniejących narzędzi. Przestudiuj istniejące parsery. Istnieje wiele parserów napisanych w Lisp, ale niewiele w książkach na ten temat (poza parserami języka naturalnego, które są opisane w literaturze AI).
Zależy. Zobacz Quicklisp lub bibliotekę specyficzną dla implementacji.
Zależy. Zobacz Quicklisp lub bibliotekę specyficzną dla implementacji. -> FFI
Końcowa rada: przeczytaj kod od innych autorów.
Przestudiuj inny kod Lispa. Istnieje wystarczająco dużo zróżnicowanego kodu Lispa. Od serwerów internetowych po oprogramowanie do komponowania muzyki.
źródło
Sprawdź Cliki, wiki Common Lisp , zawiera listę bibliotek dostępnych dla Common Lisp, które pomogą ci osiągnąć wszystkie twoje pozycje.
Będziesz także chciał sprawdzić Common Lisp Cookbook (jest też bardziej zaktualizowana wersja ). Ma kilka kodu dla typowych zadań, takich jak czytanie jedną linię plik na raz i interfejsów funkcjonalnych obce dla interakcji z bibliotek napisanych w C .
Możesz pisać rozszerzenia dla Lispa w C w zależności od używanej implementacji. Na przykład Emacs-Lisp pozwala ci to zrobić, chociaż nie jest to Common Lisp. Zwykle to, co chcesz zrobić, to napisać kod w Common Lisp, a następnie zoptymalizować go tak bardzo, jak to możliwe, używając różnych deklaracji kompilatora Lisp lub innej metody, w której używasz obcego interfejsu funkcji.
Wątkowanie zależy od używanej implementacji, ale myślę, że większość z nich ma teraz wątki.
Hunchentoot jest jednym z najlepszych serwerów internetowych Lisp i jest dość łatwy do rozpoczęcia. Nie musisz samodzielnie pisać żadnego kodu wątków, wystarczy napisać funkcje obsługi żądań HTTP.
Ktoś skompilował listę opcji GUI dla Lispa :
źródło