Próbowałem zrozumieć różnicę między Lisp-1 a Lisp-2 i jak to się ma do Clojure, ale wciąż nie rozumiem poprawnie. Czy ktoś może mnie oświecić?Jaka jest różnica między Lisp-1 i Lisp-2?
Odpowiedz
Według wikipedia:
czy odrębny nazw dla funkcji jest zaletą jest źródłem niezgody w Lisp społeczności. Zwykle jest to nazywane debatą Lisp-1 vs. Lisp-2. Lisp-1 odnosi się do modelu Schematu, a Lisp-2 do modelu Common Lisp.
Zasadniczo chodzi o to, czy zmienne i funkcje mogą mieć tę samą nazwę bez konfliktu. Clojure is a Lisp-1 oznacza, że nie pozwala na jednoczesne użycie tej samej nazwy dla funkcji i zmiennej.
Możesz przeczytać tę paper autorstwa Richarda Gabriela. Jest to podsumowanie problemów, o których dyskutowała społeczność Lisp w Lisp1 i Lisp2. Jest nieco gęsty i powolny w pierwszych kilku rozdziałach, ale jest znacznie łatwiejszy do odczytania przed przejściem do sekcji 5.
Zasadniczo Lisp1 ma pojedyncze środowisko, które odwzorowuje symbole na wartości, a wartości te można "zwykły" lub funkcje. Lisp2 ma (przynajmniej) dwa przestrzenie nazw (symbole mają gniazdo dla ich wartości funkcji i jedną dla zwykłej wartości). Tak więc, w Lisp2, możesz mieć funkcję o nazwie foo i wartość o nazwie foo, podczas gdy w Lisp1 nazwa foo może odnosić się tylko do pojedynczej wartości (funkcji lub w inny sposób).
Istnieje kilka kompromisów i różnic w smaku między tymi dwoma, ale przeczytaj artykuł o szczegółach. Książka Christiana Queinneca "Lisp in Small Pieces" również omawia różnice tkwiące w tekście.
Jedną z bardziej enigmatycznych sekcji artykułu Gabriela jest sekcja 11 dotycząca przetwarzania wieloprocesowego. W tej części sugeruje, że Lisp1 bardziej sprzyja funkcjonalnemu stylowi programowania, a zatem bardziej sprzyja procesowi wieloprocesowemu. Oczywiście, jest to interesujące w Clojure. Ale nie jestem naprawdę pewien * dlaczego * Lisp1 jest bardziej sprzyjający FP. Ktoś ma wgląd w to? –
prawdopodobnie dlatego, że głównym punktem FP jest traktowanie funkcji jako wartości pierwszej klasy, dlatego jest to o wiele wygodniejsze i czystsze pod względem koncepcyjnym traktowanie ich w taki sam sposób, jak wszystkich innych wartości. – mikera
@PeterMcLain Kiedy użytkownicy dialektów Lisp-1 mówią: Lisp- 1 jest bardziej sprzyjający programowaniu funkcjonalnemu, chodzi o to, że nie musisz wciskać kodu pełnego operatorów "funcall" i "function". Te znikają w Lisp-1. – Kaz
- 1. Jaka jest różnica między? : i ||
- 2. Jaka jest różnica między $ i $$?
- 3. Jaka jest różnica między Subtotal i BaseSubtotal?
- 4. Jaka jest różnica między DetachedCriteria i ICriteria
- 5. Jaka jest różnica między & # x00A0; i ?
- 6. Jaka jest różnica między lex i yacc
- 7. jaka jest różnica między dijit i dojo
- 8. Jaka jest różnica między Control.Select() i Control.Focus()?
- 9. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 10. Jaka jest różnica między apletami i SWING?
- 11. Jaka jest różnica między session.commit() i session.flush()?
- 12. Jaka jest różnica między ImageView.setBackgroundResource i ImageView.setImageResource?
- 13. Jaka jest różnica między Konwertuj i parsuj?
- 14. Jaka jest różnica między JSP i JSTL?
- 15. Jaka jest różnica między Lazarus i CodeTyphon
- 16. Jaka jest różnica między crc32 i crc32b?
- 17. Jaka jest różnica między TypedArray.getInteger() i TypedArray.getInt()?
- 18. jaka jest różnica między ARM7 i ARM7s
- 19. Jaka jest różnica między http_build_str() i http_build_query()?
- 20. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 21. Jaka jest różnica między mock.patch.object (... i mock.patch (
- 22. Jaka jest różnica między GetBlobReference i GetBlobReferenceFromServer?
- 23. Jaka jest różnica między NSLayoutAttributeBaseline i NSLayoutAttributeBottom?
- 24. Jaka jest różnica między handlebar.js i handlebar.runtime.js?
- 25. Jaka jest różnica między innerText i outerText?
- 26. Jaka jest różnica między Json i Jsonp?
- 27. Jaka jest różnica między WCF i WPF?
- 28. Jaka jest różnica między runghc i runhaskell?
- 29. Jaka jest różnica między -hivevar i -hiveconf?
- 30. Jaka jest różnica między writeUTF i writeChars?
Czy Lisp-2 nie jest bardziej zagmatwany, mając funkcje i zmienne o tych samych nazwach? – Zubair
Po części dlatego, że programiści używający dialektów Lisp-2 nie robią nic, aby mieć funkcje i zmienne o tych samych nazwach. 'lista' jest często używana jako parametr funkcyjny i nie ma rzeczy, OMG, która jest tak zagmatwana, ponieważ' (lista ...) 'jest standardową funkcją. Wiele funkcji, które mają "listę" jako zmienną, nie korzystają z funkcji 'list' lub nie używają jej w pobliżu tej zmiennej. Nawet jeśli tak się stanie, nie jest tak źle: '(lista lista foo)'. Nie jest to bardziej mylące niż zdanie typu "walcz w dobrej walce", w którym to samo słowo pojawia się jako rzeczownik i czasownik. – Kaz
@Zubair Java ma jeszcze więcej przestrzeni nazw. Możesz zdefiniować klasę, metodę i zmienną o tej samej nazwie. – ceving