Even though we write them with the same parenthesis syntax
E questa è fondamentalmente la risposta alla tua domanda.
we need to learn how each works.
Mentre è possibile introdurre DSL con una sintassi non così lispy come Common Lisps loop
usando macro regolari (lascerò fuori da questo i macro dei lettori), sono principalmente usati per controllare la valutazione, e continueranno a essere usati regolarmente sintassi di espressione s. Una caratteristica importante è che anche i macro più complessi di loop
possono essere letti usando lo stesso vecchio lettore sexpr.
Anche se è vero che dovrai conoscere le diverse macro e la forma di input che prendono, diciamo cond
di Common Lisp con il cond
più nidificato rispetto a Clojure riducendo uno strato di nidificazione, che non fa t tenere solo per macro, ma anche per funzioni regolari. Immagina una funzione usuale prendendo come argomento un elenco quotato di una particolare struttura: dovrai comunque conformarti alla struttura di input prevista, se la funzione trasforma il codice, si aspetta una sorta di alist, plist, un albero o qualcosa di completamente diverso.
Ogni volta che incontri nuove funzionalità, ci saranno alcune API che dovrai imparare. Ciò vale anche per un linguaggio che ammette solo la sintassi function(arg1, arg2, …, argN)
rigorosa - dovresti ancora imparare quali sono gli argomenti previsti, quali effetti collaterali si verificano e quale è l'output di una determinata funzione.
Ciò che è più semplice della sintassi Lisp rispetto a un linguaggio come Scale, è che tutto è rappresentato più o meno lo stesso, e anche che il codice stesso usava queste rappresentazioni e strutture dati (che sarebbe il omosessualità di cui tutti parlano). Questa differenza nella complessità sintattica diventerebbe piuttosto chiara se si provasse a scrivere un parser Lisp o Clojure e quindi un parser Scala. Dovrai affrontare una grammatica molto più complicata - regole più complesse in materia di precedenza, spazio bianco, ambiguità, più eccezioni e così via.