Próximo: Funções e Variáveis para entrada e saída, Anterior: stringproc, Acima: stringproc [Conteúdo][Índice]
O arquivo stringproc.lisp
amplia a compatibilidade do Maxima de trabalhar com seqüências de caracteres
e adiciona algumas funções úteis a entrada e saída de dados.
Para esclarecimentos e correções por favor mande um e-mail para van.nek at arcor.de .
No Maxima uma seqüência de caracteres é facilmente contruída digitando "texto" (qualquer texto desejado entre aspas duplas).
Note que seqüências de caracteres do Maxima não são seqüências de caracteres do Lisp e vice-versa.
stringp
realiza testes para seqüências de caracteres
do Maxima, e lstringp
realiza testes para seqüências de caracteres do Lisp.
Se por alguma razão voce tiver um valor,
que é uma seqüência de caracteres do Lisp, talvez quando estiver usando a função sconcat
do Maxima, você pode converter via sunlisp
.
(%i1) m: "text"; (%o1) text (%i2) [stringp(m),lstringp(m)]; (%o2) [true, false] (%i3) l: sconcat("text"); (%o3) text (%i4) [stringp(l),lstringp(l)]; (%o4) [false, true] (%i5) stringp( sunlisp(l) ); (%o5) true
Todas as funções em stringproc.lisp
, que retornarem seqüências de caracteres, retornam seqüências de caracteres do Maxima.
Caracteres são introduzidos como seqüências de caracteres do Maxima de comprimento 1.
Com certeza, esses caracteres não são caracteres do Lisp.
Testes podem ser realizados com charp
( lcharp
e conversões do Lisp para o Maxima com cunlisp
).
(%i1) c: "e"; (%o1) e (%i2) [charp(c),lcharp(c)]; (%o2) [true, false] (%i3) supcase(c); (%o3) E (%i4) charp(%); (%o4) true
Novamente, todas as funções em stringproc.lisp
, que retornam caracteres, retornam caracteres do Maxima.
devido a esse fato, que os caracteres introduzidos são seqüências de caracteres comprimento 1,
você pode usar muitas das funções de seqüência de caracteres também para caracteres.
Como visto, supcase
é um exemplo.
É importante saber,
que o primeiro caractere em uma seqüência de caracteres do Maxima éstá na posição 1.
Isso é designado devido ao fato de o primeiro elemento em uma lista do Maxima está na posição 1 também.
Veja definições de charat
e de charlist
para obter exemplos.
Em aplicações fnções de seqüência de caractere são muitas vezes usadas quando estamos trabalhando com arquivos.
Você encontrará algumas úteis funções de fluxo e funções de impressões em stringproc.lisp
.
O seguinte exemplo mostra algumas das funções aqui introduzidas no trabalho.
Exemplo:
openw
retorna um fluxo de saída para um arquivo, printf
então permite escrita formatada
para esse arquivo. Veja printf
para detalhes.
+(%i1) s: openw("E:/file.txt"); +(%o1) #<output stream E:/file.txt> +(%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) ); +(%o2) done +(%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%", 42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 ); +(%o3) false +(%i4) close(s); +(%o4) true
Após fechar o fluxo você pode abrí-lo novamente, dessa vez com direção de entrada.
readline
retorna a linha completa como uma seqüência de caracteres. O pacote stringproc
agora oferece muitas funções para manipulação de seqüências de caracteres. A troca de indicações/fichas pode ser realizada por
split
ou por tokens
.
(%i5) s: openr("E:/file.txt"); (%o5) #<input stream E:/file.txt> (%i6) readline(s); (%o6) 0 1 1 2 3 5 8 13 21 34 55 (%i7) line: readline(s); (%o7) 42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2 (%i8) list: tokens(line); (%o8) [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2] (%i9) map( parsetoken, list ); (%o9) [42, 1.234, false, false, 0.01, 0.01, false]
parsetoken
somente analiza números inteiros e em ponto flutuante. A análise de símbolos ou grandes números em ponto flutuante
precisa de parse_string
, que irá ser disponibilizada para uso automaticamente através de eval_string.lisp
.
(%i10) map( parse_string, list ); (%o10) [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2] (%i11) float(%); (%o11) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01, 0.01, 0.01] (%i12) readline(s); (%o12) false (%i13) close(s)$
readline
retorna false
quado o fim de arquivo acontecer.
Próximo: Funções e Variáveis para entrada e saída, Anterior: stringproc, Acima: stringproc [Conteúdo][Índice]