Uczyłem się Lispa, aby poszerzyć swoje horyzonty, ponieważ słyszałem, że jest używany w programowaniu AI. Po kilku badaniach nie znalazłem jeszcze przykładów sztucznej inteligencji ani czegokolwiek w języku, który skłoniłby go do tego bardziej.
Czy Lisp był używany w przeszłości, ponieważ był dostępny, czy jest coś, czego mi brakuje?
lisp
artificial-intelligence
Cristián Romo
źródło
źródło
Odpowiedzi:
Lisp BYŁ używany w AI do końca lat 80. Jednak w latach 80. Common Lisp został wyprzedany w świecie biznesu jako „język AI”; ta reakcja zmusiła większość programistów AI do C ++ na kilka lat. Obecnie prototypy są zwykle pisane w młodszym dynamicznym języku (Perl, Python, Ruby itp.), A implementacje udanych badań są zwykle w C lub C ++ (czasami w Javie).
Jeśli jesteś ciekawy lat 70-tych ... cóż, mnie tam nie było. Ale myślę, że Lisp odniósł sukces w badaniach AI z trzech powodów (w kolejności od najważniejszych):
Nie mam starej książki Petera Norviga o AI , ale ma to być dobry sposób na nauczenie się programowania algorytmów AI w Lispie.
Zastrzeżenie: Jestem absolwentem lingwistyki komputerowej. Poddziedzinę przetwarzania języka naturalnego znam znacznie lepiej niż inne dziedziny. Może Lisp jest używany częściej w innych podpolach.
źródło
Artificial Intelligence by Patrick Henry Winston
. W drugiej edycji rozdziały programistyczne tej książki rozgałęziały się na własną, zsynchronizowaną książkę -Lisp
. Jak sama nazwa wskazuje, programowanie odbywa się całkowicie wLisp
. people.csail.mit.edu/phw/Books/LISPBACK.HTMLLisp jest używany dla sztucznej inteligencji, ponieważ obsługuje implementację oprogramowania, które bardzo dobrze oblicza symbole. Symbole, wyrażenia symboliczne i obliczenia z nimi są podstawą Lispa.
Typowymi obszarami sztucznej inteligencji do obliczeń z użyciem symboli były / są: algebra komputerowa, dowodzenie twierdzeń, systemy planowania, diagnostyka, systemy przepisywania, reprezentacja wiedzy i rozumowanie, języki logiczne, tłumaczenie maszynowe, systemy ekspertowe i inne.
Nic więc dziwnego, że wiele znanych aplikacji AI w tych domenach zostało napisanych w Lispie:
Istnieją tysiące aplikacji w tych obszarach, które są napisane w Lispie. Często zdarza się, że potrzebują specjalnych zdolności w dziedzinie przetwarzania symbolicznego. Jeden implementuje specjalne języki, które oprócz Lispa mają specjalne interpretery / kompilatory w tych domenach. Lisp pozwala tworzyć reprezentacje danych symbolicznych i programów oraz może implementować wszelkiego rodzaju maszyny do manipulowania tymi wyrażeniami (formuły matematyczne, formuły logiczne, plany, ...).
(Zauważ, że wiele innych języków programowania ogólnego przeznaczenia jest również używanych w AI. Próbowałem odpowiedzieć, dlaczego szczególnie Lisp jest używany w AI.)
źródło
Jednym z powodów jest to, że pozwala ci rozszerzyć język o konstrukcje specyficzne dla twojej domeny, czyniąc go efektywnie językiem specyficznym dla domeny. Ta technika jest niesamowicie potężna, ponieważ pozwala na rozumowanie problemu, który rozwiązujesz, zamiast tasowania bitów.
źródło
Domyślam się, że będąc językiem funkcjonalnym, nie rozróżnia kodu i danych. Wszystko, w tym definicje funkcji i wywołania funkcji, może być traktowane jako listy i modyfikowane jak każdy inny fragment danych.
Dzięki temu samokontroli, samomodyfikujący się kod można łatwo napisać.
źródło
Jedną z możliwych odpowiedzi jest to, że sztuczna inteligencja to zbiór bardzo trudnych problemów, a Lisp to dobry język do rozwiązywania trudnych problemów, a nie tylko sztuczna inteligencja.
Dlaczego tak jest: makra, funkcje ogólne i bogata introspekcja pozwalają na zwięzły kod i łatwe wprowadzanie abstrakcji domeny - jest to język, który możesz uczynić potężniejszym. W przypadku wielu problemów jest to niepotrzebne i wiąże się to z własnymi kosztami, ale w przypadku innych problemów ta moc jest potrzebna, aby poczynić postępy.
źródło
Myślę, że myślenie o tym wyłącznie w kategoriach sztucznej inteligencji jest złe. Rzeczy takie jak AI-zima i komercyjne skutki zwykłego seplenienia rozpraszają, jeśli pytasz, dlaczego został użyty do sztucznej inteligencji, a nie dlaczego nie jest teraz często używany ...
W każdym razie myślę, że to dlatego, że większość kodu AI była zasadniczo kodem badawczym. Lisp to świetny język do programowania eksploracyjnego, do implementowania trudnych algorytmów, do samomodyfikacji i często modyfikowanego kodu. Innymi słowy, do badania kodu.
Obecnie używam lisp do niektórych moich badań (matematyka, przetwarzanie sygnałów), ponieważ jest bardziej elastyczny i potężniejszy niż większość języków, a jednocześnie generuje bardziej wydajny kod niż większość języków. Zwykle mogę uzyskać wydajność w zakresie +/- 2 szybkości, powiedzmy c ++, ale mogę implementować rzeczy znacznie szybciej i radzić sobie ze złożonością, która zajęłaby mi znacznie więcej czasu niż mam, gdybym używał c ++, java, c #.
To jednak odchodzi od tematu. Myślę, że kod AI został przez jakiś czas napisany głównie w zwykłym seplenieniu, ponieważ jest to potężne podejście do badania kodu. To nadal jest; ale w miarę jak algorytmy „Ja” stały się lepiej rozumiane i badane, części z nich były znacznie łatwiejsze do nauczenia i używania, więc na kursach licencjackich pojawiały się w językach z nutą roku. Stamtąd staje się kwestią tego, co ludzie już wiedzą, jakie biblioteki są dostępne i co działa dobrze w przypadku dużych grup.
źródło
Domyślam się, że dużym powodem była elastyczność list jako podstawowej struktury danych.
w tamtych czasach możliwość przekształcania ich we wszelkiego rodzaju obiekty złożone i nowe rzeczy, takie jak przekazywanie wiadomości i polimorfizm, uczyniły go językiem preferowanym; nie specjalnie dla AI, ale dla dużych, złożonych zadań. zwłaszcza gdy eksperymentowali z koncepcjami.
źródło
Myślę, że masz rację: Lisp był poręcznym narzędziem do hakowania rzeczy. Dzieje się tak, ponieważ nie rozróżniał zbytnio programu i danych. Pozwoliło to hakerom na bardzo łatwe manipulowanie funkcjami, podobnie jak danymi.
Ale lisp jest dość trudny do odczytania dla ludzi, z jego nawiasami klamrowymi i brakiem rozróżnienia między danymi a programem. Dzisiaj nie będę używał lisp do żadnego produkcyjnego kodu AI (a może nawet do tworzenia prototypów), ale zdecydowanie wolałbym Pythona do tworzenia skryptów.
Inną rzeczą do rozważenia są istniejące biblioteki / narzędzia w / związane z językiem. Nie jestem w stanie porównać bibliotek lisp z bibliotekami Pythona, ale wydaje mi się, że biblioteki i open source mają teraz znacznie większe znaczenie niż wcześniej.
Ta odpowiedź została zainspirowana następującym porównaniem między lispem a pythonem: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
źródło
Pamiętam, że słyszałem, że Lisp jako język funkcjonalny był bardzo dobrym wyborem do implementacji algorytmów rekurencyjnych. Możliwość wyśledzenia drzewa i cofnięcia się jest niezbędna przy rozważaniu procesów decyzyjnych (przechodzenie) i wyniku końcowego (węzeł liścia).
Powiedziano mi to podczas kursu sztucznej inteligencji na uniwersytecie, na którym uczyliśmy się Lispa.
źródło
Bardziej cyniczna odpowiedź mogłaby brzmieć „ponieważ przegrała polityczną wojnę AI między Japonią a USA w latach 80-tych”. Istnieje zabawny wpis na blogu, który spekuluje na temat wpływu upadku systemu komputerowego piątej generacji na Prolog .
źródło