← Tutti i video

99 problemi in ELISP: Da P01 a P05.

Guarda su YouTube → 48:02 27 novembre 2021
EmacsLisp

Descrizione

In questo video introduco una nuova serie chiamata "99 problemi in ELISP". In questa serie cercherò di risolvere una serie di problemi utilizzando il linguaggio di programmazione ELISP (Emacs-Lisp). ------------------------- TIMESTAMP 00:00 P01 – last() 13:10 P02 – but-last() 17:30 P03 – elem() 27:30 P04 – length() 32:16 P05 – reverse-1() 37:30 Tail call optimization – my-reverse-2() ------------------------- RIFERIMENTI - https://github.com/LeonardoE95/yt-it/blob/main/src/2021-11-27-challenges-99-problemi-in-emacs-lisp-p01-p05 - https://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html - https://www.youtube.com/watch?v=hbsfc2RNI0Y ------------------------- CONTATTI - Technical blog: https://blog.leonardotamiano.xyz/ - Github: https://github.com/LeonardoE95?tab=repositories - Support my work: https://www.paypal.com/donate/?hosted_button_id=T49GUPRXALYTQ

Commenti 5

I commenti vengono da YouTube e sono aggiornati periodicamente.

  1. @LucaCanali 27 novembre 2021 1
    Ottimo video, la ricorsione è una brutta bestia fino a che non la capisci fino in fondo e devo dire che l'hai spiegata in maniera esaustiva e molto chiara 💪
  2. @esadecimale Autore 27 novembre 2021 1
    NOTA: nella risoluzione del problema 2 (P02), a na certa duplico la clausola (eq (cdr l) ‘()) in modo superfluo, in quanto ne basta solo una :D
  3. @danielenizzolo6629 27 novembre 2021 1
    Ciao, è bello vedere qualcuno che impara il Lisp! Se mi permetti vorrei darti qualche suggerimento. Ti consiglio di usare la funzione null per testare se una lista è nil e non è necessario usare 't per il valore di verità t, basta usare t. Puoi anche compattare alcuni cond dato che car e cdr di nil è nil. Il problema della prima reverse non è tanto lo spazio (è O(n) e non ci puoi fare niente perchè Emacs Lisp non ha TCO, per ora) ma il fatto che append richiede tempo lineare nella lunghezza della prima lista, quindi la prima reverse ha tempo O(n^2).
    2 risposte
    1. @esadecimale Autore 27 novembre 2021 1
      Hey, grazie mille per il feedback. che è estremamente apprezzato :D Penso di aver capito tutto, ma giusto per essere sicuro: dici, al posto di fare tipo (eq (cdr l) '()), posso semplicemente fare (null (cdr l)) e poi l'espressione si riduce a t (true) se la coda della lista è vuota e nil (false) altrimenti (e lo stesso per la testa di una lista vuota) Per quanto riguarda l'append, non ero completamente sicuro ma sospettavo una complessità lineare, comunque buono a sapersi.
    2. @danielenizzolo6629 27 novembre 2021 1
      @esadecimale Sì esatto e in generale quando non mi ricordo cosa fa una funzione uso C-h f o M-x describe-function.