REPL

Pontos importantes:

O modo de trabalho: ler uma expressão, avaliar essa expressão de acorco com as regras da Lisp e, por fim, imprimir um resultado. Esse é o Read-Eval-Print Loop (REPL). Atenção: o REPL lê expressões, não lê linhas.

As expressões podem avaliar para alguma coisa diferente ou ser self-evaluating, ou seja, avaliam para elas mesmas. Importante: toda expressão em Lisp avalia para alguma coisa ou para NIL (falso e/ou nulo).

Qualquer coisa entre parênteses é uma lista. Em geral Lisp avalia as listas da seguinte forma:

  • O primeiro elemento é o nome de uma função
  • Os demais elementos são expressões a serem avaliadas

A definição de uma função avalia para (retorna) o nome da função, e o efeito colateral é a definição/criação da nova função. A sintaxe geral é:

(defun <nome> (<argumentos>) (<corpo>))

(defun ola-mundo () (format t "olá, mundo"))

Importante: as funções retornam automaticamente o valor da última expressão que foi avaliada.

Funções Lisp aprendidas:

;; Funções para imprimir um output
(format t "olá, mundo")
(write-line "olá, mundo")
(print "olá, mundo")

;; Função para compilar um arquivo
(compile-file "arquivo.lisp")

;; Função para carregar um arquivo
(load "arquivo.lisp")
(load "arquivo.fasl")

Atalhos SLIME aprendidos:

,              <vírgula>
               Vai para a linha de comando

cd, pwd        Na linha de comando, comandos comuns para
               navegação em diretórios

C-c C-c        slime-compile-defun
               Envia a definição para o Lisp para ser avaliada

C-c C-l        slime-load-file
               Pergunta o arquivo a carregar, tendo como padrão
               o buffer atual

C-c C-k        slime-compile-and-load-file
               Compila e carrega o arquivo no buffer atual

M-x quit       Sai do buffer Lisp e encerra o REPL
M-x sayoonara  (idem)

M-x slime      Invoca/inicia um novo buffer Lisp