IMHO žádné velké, i když to ve škole takto pořád učí :-D Pokud uděláš referenčně transparentní funkci s cyklem uvnitř, tak to asi není nic proti ničemu. Navíc funkce s TCO je vlastně jen jinak zapsaná smyčka :-)
Nám to ve škole vysvětlili tak, že používáme LISP (Xlisp) jen jako náhradu za lambda kalkul, takže možná odtud to vychází?
zkusím to ještě uvést na správnou míru.
My se učili LISP asi půl semestru a bylo tam zhruba toto:
setq, cond, car, cdr, cons, defun, apply, atom, list, null (ty poslední tři jsou ale predikáty): tedy například žádné lokální proměnné, tudíž ani nebyla diskuze o oblasti viditelnosti :-)
A z toho se stavěly školní projektíčky typu otočení seznamu, průchod stromem in/pre/post order atd. Člověk potom přišel do praxe a dostal se k CL a čuměl, co to vlastně všechno umí (například makra, miliardy variant smyček přes makra, map atd.)
Na UPOLu mají zajímavější předměty s LISPem, konkrétně s CL:
http://www.inf.upol.cz/lide/michal-krupka/vyuka/programovani-v-common-lispu
http://www.inf.upol.cz/lide/michal-krupka/vyuka/paradigmata-programovani-2
Nevím jak dnes, ale kdysi se na CL učilo i OOP. Takový pohled na objekty z jiné perspektivy
používám VS Code i Emacs. Obojí má své pro i proti. VS Code má větší komunitu v oblasti webového vývoje. Emacs má lepší konfigurovatelnost a hackovatelnost, GUI, které neruší. Konfigurační skripy jsou flexibilnější než JSON. Architektura rozšíření ve VS Code je IMHO překombinovaná. Neexistují jednoduchá jednosouborová rozšíření.
Atom se mi líbí, ale stále má problémy s lagováním. Těším se na editor Xray.
Nano beru jako pokus o trolling.
Přínos Vimu je pekelná rychlost editace jen za použití klávesnice a ohromná knihovna balíčků.
Emacs je něco jako Vim, jen je mnohem (neomezeně) rozšiřitelnější. Emacs si přizpůsobíš přesně tak, jak potřebuješ a s tím jde ruku v ruce pohodlnost a rychlost editace kódu.
Jak Vim tak i Emacs umí to samé co velké IDE zaměřené na ten který jazyk plus vše už zmíněné. To jsou důvodu proč jsou tyto editory přínosem.
Jako příklad rozšiřitelnosti Emacsu je možné uvést modul evil který implementuje celí Vim. A nebo webový browser eww.
Příště prosím zmínit makro LOOP z cl-lib. Elisp je známý svou malou sadou iteračních nástrojů, emulace common lispu je v takovou chvíli nutnost.
Dále prosím, nikdy v elispu nepoužívejte rekurzi když to není nezbytně nutné. Volání funkcí je v elispu relativně drahé, takže je lepší použít standardní formou iterace.
příklady, které jsou v dokumentaci k funkci cl-loop jdou podle mě přepsat lépe bez použití cl-lib
https://www.gnu.org/software/emacs/manual/html_node/cl/Loop-Examples.html#Loop-Examples
hned ten první
(cl-loop for buf in (buffer-list)
collect (buffer-file-name buf))
bych přepsal na (mapcar 'buffer-file-name (buffer-list))
ah se divam, ze je to zmineno tady https://www.root.cz/clanky/upravy-emacsu-a-tvorba-novych-modulu-s-vyuzitim-emacs-lispu/#k04
Pro gll - to makro je hodne dobre, napriklad umi http://cl-cookbook.sourceforge.net/loop.html
Jestli si dobre pamatuju, zminuje ho i Paul Graham v On Lisp (doporucuju!, akorat asi neni k dispozici HTML verze, takze nemuzu odkazovat)
Hezky jste se mlhavou formulací u let-u vyhnul detailu, který by vedl k výkladu o proměnné lexical-binding :)
if, and a or, umí víc než se zdá a než je v článku:
(or nil 1 2) => 1, (and 1 2 3) => 3, (if cond do else-1 else-2) je validní (poslední je rozdíl i proti třeba Common Lispu).