Próbuję nauczyć się Lisp i patrzeć na wszystkie Lispy i ich różnice.
Widzę, że w niektórych implementacjach Schematu można używać nawiasów kwadratowych zamiennie z nawiasami okrągłymi dla zapewnienia czytelności, więc ponieważ są one traktowane tak samo, zakładam, że nadal są one tylko wyrażeniami S, jak wszystko inne.
Jednak w Clojure widzę, że nawiasy kwadratowe i nawiasy klamrowe są używane do reprezentowania różnych typów danych, takich jak wektory i tak dalej. Czy są to również nadal prawidłowe wyrażenia S, czy też należy je uważać za atomy? Czy to nie „łamie” całej koncepcji wyrażeń S, przez co Clojure jest „nieczystym” Lispem?
Odpowiedzi:
Dosłowna notacja dla wektorów i map (tj. Nawiasy kwadratowe i nawiasy klamrowe) to po prostu cukier w czasie odczytu , a wszystko, co możesz reprezentować za pomocą tej notacji, może być również reprezentowane za pomocą wyrażeń S. W rezultacie nie ma utraty mocy ani homoikoniczności, a makra czytników (które, jak rozumiem, są jeszcze potężniejsze) są dostępne w wielu seplenieniach.
Nawiasem mówiąc, zwróć uwagę, że Clojure zapewnia teraz mechanizm tworzenia niestandardowych literackich „otagowanych”, które, podobnie jak inne literały, są przekształcane w wyrażenia S przed ich kompilacją i interpretacją.
źródło
Wyrażenia S są tekstową reprezentacją danych. Liczby, symbole, komórki przeciw, listy, ciągi, ... Common Lisp ma również reprezentacje tekstowe dla tablic, wektorów, więcej typów liczb, znaków, ... Common Lisp zapewnia również rozszerzalny czytnik, dzięki czemu użytkownik może dodać więcej reprezentacji tekstowych dla typów danych. Czasami ten mechanizm służy również do zmiany składni języka programowania Lisp (na przykład do obsługi wyrażeń lub instrukcji infix z innych języków programowania).
Tak więc, jeśli dialekt Lisp oferuje reprezentacje tekstowe dla dodatkowych typów danych, dobrze pasuje to do idei wyrażeń s.
źródło