LISP: Introdução à função format I

A função format pode parecer estranha à primeira vista. Quem nunca programou faz cara de que não entendeu e quem está acostumado com o printf do C fica procurando %s ou %g ou %d ou …

Bom, não há muito mistério. O primeiro argumento indica onde a função irá imprimir o resultado (um arquivo, a tela, etc). Não vamos nos preocupar com isso ainda, por isso coloque nil em todos os casos.

Agora o terceiro argumento. Ele é uma string que pode, ou não, apresentar diretrizes. Essas diretrizes começam com um til (~) e dizem à função que aquilo deverá ser substituido por algum argumento posterior a essa string.
[1]> (format nil "~a + ~a = ~a" 7 8 (+ 7 8))
"7 + 8 = 15"

Nesse exemplo eu usei a diretriz mais simples, ~a. A primeira foi trocada pelo primeiro argumento, 7, a segunda por 8 e a terceira pelo resultado de (+ 7 8). Se você já estava acostumado aos % do printf do C, nenhuma novidade, exceto pelo fato de que você usa ~ ao invés de %. Bom, a diferença não é somente essa, mas a idéia é mais ou menos a mesma, trocar o que for antecedido por ~ por alguma outra coisa.

Dependendo de qual diretriz for usada, você terá um resultado diferente. No exemplo a cima eu usei ~a, e disse que era a mais simples. Seu nome vem de aesthetical, estético, ela imprime o argumento de forma facilmente legível por seres humanos. Além disso, a diretriz ~a aceita qualquer tipo de argumento, inteiros, floats, strings; até listas ela aceita.
[2]> (format nil "~a" "string")
"string"
[3]> (format nil "~a" 10)
"10"
[4]> (format nil "~a" (list 1 2 3))
"(1 2 3)"

Geralmente as diretrizes aceitam parâmetros que modificam o funcionamento das diretrizes. Os parâmetros são colocados entre o ~ e o nome da diretriz, mas como os parâmetros para a diretriz ~a são mais utilizados para a impressão de dados tabelados, vamos deixar isso para mais tarde.

Outra diretriz de uso geral é a ~s, mas ela faz exatamente o contrário da diretriz ~a. Ao invés de imprimir de forma legível por nós, ela imprime de uma maneira que seja facilmente interpretada pela função read.
[5]> (format nil "~s" "string")
"\"string\""

Nem todas as diretrizes consomem argumentos. É o caso das diretrizes ~% e ~&. Ambas fazem a mesma coisa, mas de jeitos diferentes. ~% imprime uma nova linha, incondicionalmente, enquanto que ~& imprime uma nova linha, a não ser que já se esteja no começo de uma nova linha. O uso de ~& é interessante quando não se quer mais linhas em branco que o necessário.

Covenhamos que escrever ~%~%~% é um tédio. Então você pode simplificar as coisas usando um parâmetro. Se você escrever ~3%, serão impressas três novas linhas, ~5%, cinco linhas, etc. Você pode fazer o mesmo com ~& e dependendo da situação você terá n novas linhas ou (n-1) novas linhas.

Nas próximas partes veremos diretrizes específicas para caracteres, inteiros, pontos flutuantes, etc.

Publicidade

Uma resposta para “LISP: Introdução à função format I

  1. Pingback: LISP: Introdução à Função Format II « Aletéia

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: