Categories
IDE

Emacs (4): espressioni

Emacs permette di interpretare dei simboli e delle espressioni (liste tra parentesi tonde). Gli errori vanno compresi perchè sono utili al programmatore.

Per avviare dal terminale Emacs

emacs prova.txt

Per interpretare un’espressione puoi provare a digitare una lista di tre elementi tra parentesi separati dallo spazio:

(+ 2 1)

  • Buffer: è l’area di lavoro dove si digita il testo

Per poter eseguire il precedente programma composto da una sola riga, si deve porre il cursore in fondo alla riga, dopo la parentesi tonda e premere C-x C-e.

In basso nell’area EchoArea di Emacs apparirà 3

  • EchoArea: è l’area inferiore per l’output (di sola lettura)

Errore intenzionale

Sulla nuova riga, puoi provare a digitare una lista di tre elementi, con un errore intenzionale:

(k 2 1)

Premendo C-x C-e si ottiene errore, e perciò si entra nel Debugger:

  • Si apre il Buffer *Backtrace*
  • Il buffer *backtrace* si legge dal basso verso l’alto.
  • Per uscire dall’errore premere q
  • Ripremere C-x C-e per ritornarvi.
  • Dal basso verso l’alto si legge anche che:
    • C-x C-e è un modo alternativo per chiamare il comando M-x eval-last-sexp (Evaluate-Last-Simbolic-Expression)

Nel Debugger, in alto si legge la causa dell’errore, cioè aver tentato di intepretare una parola atomica ‘k

(k 2 1)

Errore:

(void-function k)

  • le parentesi tonde annunciano la valutazione di una funzione (nella lista)
  • void-function = ho trovato una funzione senza istruzioni
  • k = dovrebbe essere una funzione, ma è vuota, senza istruzioni, e quindi causa l’errore

Per uscire premere q

Alternativa

Nel precedente esempio c’è qualcosa di scomodo: se si sta digitando un testo, oppure un programma, scrivere queste espressioni ci obbliga a fare un pasticcio nel testo e poi a premere C-x C-e

Tutto questo si può evitare, infatti è possibile digitare ed interpretare un’espressione in un minibuffer temporaneo (con memoria della storia dei comandi):

M-: (+ 2 1) RET

  • Il minibuffer è l’area inferiore per l’input (di scrittura)
  • M-:
  • eval-expression