Próximo: Definições para entrada e saída, Anterior: stringproc, Acima: stringproc [Conteúdo][Índice]
O ficheiro stringproc.lisp
amplia a compatibilidade do Maxima de trabalhar com sequências de caracteres
e adiciona algumas funções úteis a entrada e saída de dados.
Para esclarecimentos e erros por favor mande um e-mail para van.nek at arcor.de .
Para disponibilizar stringproc.lisp
para uso digite load("stringproc");
.
No Maxima uma sequência de caracteres é facilmente contruída digitando "texto" (qualquer texto desejado entre aspas duplas).
Note que sequências de caracteres do Maxima não são sequências de caracteres do Lisp e vice-versa.
Testes podem ser concluídos com stringp
e lstringp
.
Se por alguma razão tiver um valor,
que é uma sequência de caracteres do Lisp, talvez quando estiver usando a função sconcat
do Maxima, poderá converter via sunlisp
.
(%i1) load("stringproc")$ (%i2) m: "text"; (%o2) text (%i3) [stringp(m),lstringp(m)]; (%o3) [true, false] (%i4) l: sconcat("text"); (%o4) text (%i5) [stringp(l),lstringp(l)]; (%o5) [false, true] (%i6) stringp( sunlisp(l) ); (%o6) true
Todas as funções em stringproc.lisp
, que retornarem sequências de caracteres, retornam sequências de caracteres do Maxima.
Caracteres são introduzidos como sequê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) load("stringproc")$ (%i2) c: "e"; (%o2) e (%i3) [charp(c),lcharp(c)]; (%o3) [true, false] (%i4) supcase(c); (%o4) E (%i5) charp(%); (%o5) true
Novamente, todas as funções em stringproc.lisp
, que
retornam caracteres, retornam caracteres do Maxima. devido a esse
facto, que os caracteres introduzidos são sequências de caracteres
de comprimento 1, pode usar muitas das funções de sequência de
caracteres também para caracteres. Como visto, supcase
é um
exemplo.
É importante saber,
que o primeiro caractere em uma sequência de caracteres do Maxima éstá na posição 1.
Isso é designado devido ao facto 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 sequência de caractere são
muitas vezes usadas quando estamos trabalhando com ficheiros. Poderá
encontrará algumas funções úteis de fluxo e de impressão 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 ficheiro,
printf
então permite escrita formatada para esse ficheiro. Veja
printf
para detalhes.
(%i1) load("stringproc")$ (%i2) s: openw("E:/file.txt"); (%o2) #<output stream E:/file.txt> (%i3) for n:0 thru 10 do printf( s, "~d ", fib(n) ); (%o3) done (%i4) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%", 42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 ); (%o4) false (%i5) close(s); (%o5) true
Após fechar o fluxo pode abrí-lo novamente, dessa vez
com direção de entrada. readline
retorna a linha completa
como uma sequência de caracteres. O pacote stringproc
agora
oferece muitas funções para manipulação de sequências de
caracteres. A troca de indicações/fichas pode ser realizada por
split
ou por tokens
.
(%i6) s: openr("E:/file.txt"); (%o6) #<input stream E:/file.txt> (%i7) readline(s); (%o7) 0 1 1 2 3 5 8 13 21 34 55 (%i8) line: readline(s); (%o8) 42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2 (%i9) list: tokens(line); (%o9) [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2] (%i10) map( parsetoken, list ); (%o10) [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 pode ser disponibilizada para uso através de eval_string.lisp
.
(%i11) load("eval_string")$ (%i12) map( parse_string, list ); (%o12) [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2] (%i13) float(%); (%o13) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01, 0.01, 0.01] (%i14) readline(s); (%o14) false (%i15) close(s)$
readline
retorna false
quado o fim de ficheiro acontecer.
Próximo: Definições para entrada e saída, Anterior: stringproc, Acima: stringproc [Conteúdo][Índice]