1 @c Language: Portuguese
2 @c Source: stringproc.texi (en) 1.6
4 * Introdução a manipulação de sequências de caracteres::
5 * Definições para entrada e saída::
6 * Definições para caracteres::
7 * Definições para sequências de caracteres::
10 @node Introdução a manipulação de sequências de caracteres, Definições para entrada e saída, stringproc, stringproc
11 @section Introdução a manipulação de sequências de caracteres
13 O ficheiro @code{stringproc.lisp} amplia a compatibilidade do Maxima de trabalhar com sequências de caracteres
14 e adiciona algumas funções úteis a entrada e saída de dados.
16 Para esclarecimentos e erros por favor mande um e-mail para van.nek at arcor.de .
18 Para disponibilizar @code{stringproc.lisp} para uso digite @code{load("stringproc");}.
20 No Maxima uma sequência de caracteres é facilmente contruída digitando "texto" (qualquer texto desejado entre aspas duplas).
21 Note que sequências de caracteres do Maxima não são sequências de caracteres do Lisp e vice-versa.
22 Testes podem ser concluídos com @code{stringp} e @code{lstringp}.
23 Se por alguma razão tiver um valor,
24 que é uma sequência de caracteres do Lisp, talvez quando estiver usando a função @code{sconcat} do Maxima, poderá converter via @code{sunlisp}.
28 @c load("stringproc")$
30 @c [stringp(m),lstringp(m)];
31 @c l: sconcat("text");
32 @c [stringp(l),lstringp(l)];
33 @c stringp( sunlisp(l) );
36 (%i1) load("stringproc")$
39 (%i3) [stringp(m),lstringp(m)];
41 (%i4) l: sconcat("text");
43 (%i5) [stringp(l),lstringp(l)];
45 (%i6) stringp( sunlisp(l) );
49 Todas as funções em @code{stringproc.lisp}, que retornarem sequências de caracteres, retornam sequências de caracteres do Maxima.
51 Caracteres são introduzidos como sequências de caracteres do Maxima de comprimento 1.
52 Com certeza, esses caracteres não são caracteres do Lisp.
53 Testes podem ser realizados com @code{charp} ( @code{lcharp} e conversões do Lisp para o Maxima com @code{cunlisp}).
57 @c load("stringproc")$
59 @c [charp(c),lcharp(c)];
64 (%i1) load("stringproc")$
67 (%i3) [charp(c),lcharp(c)];
75 Novamente, todas as funções em @code{stringproc.lisp}, que
76 retornam caracteres, retornam caracteres do Maxima. devido a esse
77 facto, que os caracteres introduzidos são sequências de caracteres
78 de comprimento 1, pode usar muitas das funções de sequência de
79 caracteres também para caracteres. Como visto, @code{supcase} é um
83 que o primeiro caractere em uma sequência de caracteres do Maxima éstá na posição 1.
84 Isso é designado devido ao facto de o primeiro elemento em uma lista do Maxima está na posição 1 também.
85 Veja definições de @code{charat} e de @code{charlist} para obter exemplos.
87 Em aplicações fnções de sequência de caractere são
88 muitas vezes usadas quando estamos trabalhando com ficheiros. Poderá
89 encontrará algumas funções úteis de fluxo e de impressão em
90 @code{stringproc.lisp}. O seguinte exemplo mostra algumas das
91 funções aqui introduzidas no trabalho.
95 @code{openw} retorna um fluxo de saída para um ficheiro,
96 @code{printf} então permite escrita formatada para esse ficheiro. Veja
97 @code{printf} para detalhes.
100 (%i1) load("stringproc")$
101 (%i2) s: openw("E:/file.txt");
102 (%o2) #<output stream E:/file.txt>
103 (%i3) for n:0 thru 10 do printf( s, "~d ", fib(n) );
105 (%i4) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%",
106 42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );
112 Após fechar o fluxo pode abrí-lo novamente, dessa vez
113 com direção de entrada. @code{readline} retorna a linha completa
114 como uma sequência de caracteres. O pacote @code{stringproc} agora
115 oferece muitas funções para manipulação de sequências de
116 caracteres. A troca de indicações/fichas pode ser realizada por
117 @code{split} ou por @code{tokens}.
120 (%i6) s: openr("E:/file.txt");
121 (%o6) #<input stream E:/file.txt>
123 (%o7) 0 1 1 2 3 5 8 13 21 34 55
124 (%i8) line: readline(s);
125 (%o8) 42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
126 (%i9) list: tokens(line);
127 (%o9) [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
128 (%i10) map( parsetoken, list );
129 (%o10) [42, 1.234, false, false, 0.01, 0.01, false]
132 @code{parsetoken} somente analiza números inteiros e em ponto flutuante. A análise de símbolos ou grandes números em ponto flutuante
133 precisa de @code{parse_string}, que pode ser disponibilizada para uso através de @code{eval_string.lisp}.
136 (%i11) load("eval_string")$
137 (%i12) map( parse_string, list );
138 (%o12) [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
140 (%o13) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01, 0.01, 0.01]
146 @code{readline} retorna @code{false} quado o fim de ficheiro acontecer.
148 @node Definições para entrada e saída, Definições para caracteres, Introdução a manipulação de sequências de caracteres, stringproc
149 @section Definições para entrada e saída
154 @c load("stringproc")$
155 @c s: openw("E:/file.txt");
157 @c "~2tAn atom: ~20t~a~%~2tand a list: ~20t~@{~r ~@}~%~2tand an integer: ~20t~d~%"$
158 @c printf( s,control, 'true,[1,2,3],42 )$
160 @c s: openr("E:/file.txt");
161 @c while stringp( tmp:readline(s) ) do print(tmp)$
165 (%i1) load("stringproc")$
166 (%i2) s: openw("E:/file.txt");
167 (%o2) #<output stream E:/file.txt>
169 "~2tAn atom: ~20t~a~%~2tand a list: ~20t~@{~r ~@}~%~2tand an integer: ~20t~d~%"$
170 (%i4) printf( s,control, 'true,[1,2,3],42 )$
174 (%i6) s: openr("E:/file.txt");
175 (%o6) #<input stream E:/file.txt>
176 (%i7) while stringp( tmp:readline(s) ) do print(tmp)$
178 and a list: one two three
184 @deffn {Função} close (@var{fluxo})
185 Fecha @var{fluxo} e retorna @code{true} se @var{fluxo} tiver sido aberto anteriormente.
189 @deffn {Função} flength (@var{fluxo})
190 Retorna o número de elementos em @var{fluxo}.
194 @deffn {Função} fposition (@var{fluxo})
195 @deffnx {Função} fposition (@var{fluxo}, @var{pos})
196 Retorna a posição corrente em @var{fluxo}, se @var{pos} não está sendo usada.
197 Se @var{pos} estiver sendo usada,
198 @code{fposition} escolhe a posição em @var{fluxo}.
199 @var{pos} tem que ser um número positivo,
200 o primeiro elemento em @var{fluxo} está na posição 1.
204 @deffn {Função} freshline ()
205 @deffnx {Função} freshline (@var{fluxo})
206 escreve uma nova linha (em @var{fluxo}),
207 se a posição actual não for um início de linha.
208 Veja também @code{newline}.
211 @deffn {Função} newline ()
212 @deffnx {Função} newline (@var{fluxo})
213 Escreve uma nova linha (para @var{fluxo}).
214 Veja @code{sprint} para um exemplo de uso de @code{newline()}.
215 Note que existem alguns casos, onde @code{newline()}não trabalha como esperado.
219 @deffn {Função} opena (@var{ficheiro})
220 Retorna um fluxo de saída para @var{ficheiro}.
221 Se um ficheiro já existente tiver sido aberto, @code{opena} anexa os elementos ao final do ficheiro.
225 @deffn {Função} openr (@var{ficheiro})
226 Retorna um fluxo para @var{ficheiro}.
227 Se @var{ficheiro} não existir, ele será criado.
231 @deffn {Função} openw (@var{ficheiro})
232 Retorna um fluxo de saída para @var{ficheiro}.
233 Se @var{ficheiro} não existir, será criado.
234 Se um ficheiro já existente for aberto, @code{openw} modifica destrutivametne o @var{ficheiro}.
238 @deffn {Função} printf (@var{dest}, @var{seq_caracte})
239 @deffnx {Função} printf (@var{dest}, @var{seq_caracte}, @var{expr_1}, ..., @var{expr_n})
240 Torna a função FORMAT do Lisp Comum disponível no Maxima.
241 (Retirado de gcl.info: "format produces formatted output by outputting the caracteres of
242 control-string string and observing that a tilde introduces a directive.
243 The caractere after the tilde,
244 possibly preceded by prefix parameters and modifiers,
245 specifies what kind of formatting is desired.
246 Most directives use one or more elements of args to create their output.")
248 A seguinte descrição e oa exemplos podem fornecer uma idéia de uso de @code{printf}.
249 Veja um referência de Lisp para maiores informações.
259 ~x inteiro hexadecimal
260 ~br inteiro de base b
261 ~r soletra um inteiro
264 ~e notação científica
265 ~g ~f ou ~e, dependendo da magnitude
266 ~a como mostrado pela função print do Maxima
267 ~s sequências de caracteres entre "aspas duplas"
269 ~< justificação de texto, ~> terminador de justificação de texto
270 ~( conversão de caixa alta/baixa, ~) terminador de conversão de caixa
271 ~[ selecção, ~] terminador de selecção
272 ~@{ iteração, ~@} terminador de iteração
275 Por favor note que não existe especificador de formato para grandes
276 números em ponto flutuante. Todavia grandes números em ponto
277 flutuante podem simplesmente serem mostrados por meio da directiva
278 @code{~a}. @code{~s} mostra as sequências de caracteres entre "aspas
279 duplas"; pode evitar isso usando @code{~a}. Note que a directiva de
280 selecção @code{~[} é indexada em zero. Também note que existem
281 algumas directivas, que não trabalham no Maxima. Por exemplo,
285 @c load("stringproc")$
286 @c printf( false, "~a ~a ~4f ~a ~@@r",
287 @c "String",sym,bound,sqrt(12),144), bound = 1.234;
288 @c printf( false,"~@{~a ~@}",["one",2,"THREE"] );
289 @c printf( true,"~@{~@{~9,1f ~@}~%~@}",mat ),
290 @c mat = args( matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]) )$
291 @c control: "~:(~r~) bird~p ~[is~;are~] singing."$
292 @c printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
295 (%i1) load("stringproc")$
296 (%i2) printf( false, "~a ~a ~4f ~a ~@@r",
297 "String",sym,bound,sqrt(12),144), bound = 1.234;
298 (%o2) String sym 1.23 2*sqrt(3) CXLIV
299 (%i3) printf( false,"~@{~a ~@}",["one",2,"THREE"] );
301 (%i4) printf( true,"~@{~@{~9,1f ~@}~%~@}",mat ),
302 mat = args( matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]) )$
306 (%i5) control: "~:(~r~) bird~p ~[is~;are~] singing."$
307 (%i6) printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
308 (%o6) Two birds are singing.
311 Se @var{dest} for um fluxo ou @code{true}, então @code{printf} retorna @code{false}.
312 De outra forma, @code{printf} retorna uma sequência de caracteres contendo a saída.
316 @deffn {Função} readline (@var{fluxo})
317 Retorna uma sequência de caracteres contendo os caracteres a partir da posição corrente em @var{fluxo} até o fim de linha ou @var{false} se o fim de linha do ficheiro for encontrado.
321 @deffn {Função} sprint (@var{expr_1}, ..., @var{expr_n})
322 Avalia e mostra seus argumentos um após o outro `sobre uma linha'
323 iniciando na posição mais à esquerda. Os números são
324 mostrados com o '-' à direita do número, e isso desconsidera o
325 comprimento da linha. @code{newline()}, que pode ser chamada a partir de
326 @code{stringproc.lisp} pode ser útil, se desejar colocar uma parada de
330 @c for n:0 thru 22 do sprint( fib(n) )$
331 @c load("stringproc")$
332 @c for n:0 thru 22 do (
333 @c sprint(fib(n)), if mod(n,10)=9 then newline() )$
336 (%i1) for n:0 thru 22 do sprint( fib(n) )$
337 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711
338 (%i2) load("stringproc")$
339 (%i3) for n:0 thru 22 do (
340 sprint(fib(n)), if mod(n,10)=9 then newline() )$
341 0 1 1 2 3 5 8 13 21 34
342 55 89 144 233 377 610 987 1597 2584 4181
348 @node Definições para caracteres, Definições para sequências de caracteres, Definições para entrada e saída, stringproc
349 @section Definições para caracteres
351 @deffn {Função} alphacharp (@var{caractere})
352 Retorna @code{true} se @var{caractere} for um caractere alfabético.
356 @deffn {Função} alphanumericp (@var{caractere})
357 Retorna @code{true} se @var{caractere} for um caractere alfabético ou um dígito.
361 @deffn {Função} ascii (@var{int})
362 Retorna o caractere correspondente ao código numérico ASCII @var{int}.
366 @c load("stringproc")$
367 @c for n from 0 thru 255 do (
368 @c tmp: ascii(n), if alphacharp(tmp) then sprint(tmp), if n=96 then newline() )$
371 (%i1) load("stringproc")$
372 (%i2) for n from 0 thru 255 do (
373 tmp: ascii(n), if alphacharp(tmp) then sprint(tmp), if n=96 then newline() )$
374 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
375 a b c d e f g h i j k l m n o p q r s t u v w x y z
380 @deffn {Função} cequal (@var{caractere_1}, @var{caractere_2})
381 Retorna @code{true} se @var{caractere_1} e @var{caractere_2} forem os mesmos.
385 @deffn {Função} cequalignore (@var{caractere_1}, @var{caractere_2})
386 como @code{cequal} mas ignora a caixa alta/baixa.
390 @deffn {Função} cgreaterp (@var{caractere_1}, @var{caractere_2})
391 Retorna @code{true} se o código numérico ASCII do @var{caractere_1} for maior que o código numérico ASCII do @var{caractere_2}.
395 @deffn {Função} cgreaterpignore (@var{caractere_1}, @var{caractere_2})
396 Como @code{cgreaterp} mas ignora a caixa alta/baixa.
400 @deffn {Função} charp (@var{obj})
401 Retorna @code{true} se @var{obj} for um caractere do Maxima.
402 Veja na seção "Introdução a manipulação de sequências de caracteres" para ter um exemplo.
406 @deffn {Função} cint (@var{caractere})
407 Retorna o código numéico ASCII de @var{caractere}.
411 @deffn {Função} clessp (@var{caractere_1}, @var{caractere_2})
412 Retorna @code{true} se o código numérico ASCII de @var{caractere_1} for menor que o código numérico ASCII de @var{caractere_2}.
416 @deffn {Função} clesspignore (@var{caractere_1}, @var{caractere_2})
417 Como em @code{clessp} ignora a caixa alta/baixa.
421 @deffn {Função} constituent (@var{caractere})
422 Retorna @code{true} se @var{caractere} for caractere gráfico e não o caractere de espaço em branco.
423 Um caractere gráfico é um caractere que se pode ver, adicionado o caractere de espaço em branco.
424 (@code{constituent} foi definida por Paul Graham, em ANSI Common Lisp, 1996, página 67.)
427 @c load("stringproc")$
428 @c for n from 0 thru 255 do (
429 @c tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
432 (%i1) load("stringproc")$
433 (%i2) for n from 0 thru 255 do (
434 tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
435 ! " # % ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @@ A B
436 C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
437 d e f g h i j k l m n o p q r s t u v w x y z @{ | @} ~
442 @deffn {Função} cunlisp (@var{lisp_char})
443 Converte um caractere do Lisp em um caractere do Maxima. (É
444 possível que não chegue a precisar dessa função.)
448 @deffn {Função} digitcharp (@var{caractere})
449 Retorna @code{true} se @var{caractere} for um dígito (algarismo de 0 a 9).
453 @deffn {Função} lcharp (@var{obj})
454 Retorna @code{true} se @var{obj} for um caractere do Lisp.
455 (Pode não precisar dessa função.)
459 @deffn {Função} lowercasep (@var{caractere})
460 Retorna @code{true} se @var{caractere} for um caractere em caixa baixa.
464 @defvr {Variable} newline
465 O caractere de nova linha.
469 @defvr {Variável} space
470 O caractere de espaço em branco.
474 @defvr {Variável} tab
475 O caractere de tabulação.
479 @deffn {Função} uppercasep (@var{caractere})
480 Retorna @code{true} se @var{caractere} for um caractere em caixa alta.
484 @node Definições para sequências de caracteres, , Definições para caracteres, stringproc
485 @section Definições para sequências de caracteres
487 @deffn {Função} sunlisp (@var{lisp_string})
488 Converte uma sequência de caracteres do Lisp em uma sequência de caracteres do Maxima.
489 (Em geral, pode não chegar a precisar dessa função.)
493 @deffn {Função} lstringp (@var{obj})
494 Retorna @code{true} se @var{obj} is uma sequência de caracteres do Lisp.
495 (Em geral, pode não chegar a precisar dessa função.)
499 @deffn {Função} stringp (@var{obj})
500 Retorna @code{true} se @var{obj} for uma sequência de caracteres do Maxima.
501 Veja a introdução para obter exemplos.
505 @deffn {Função} charat (@var{seq_caracte}, @var{n})
506 Retorna o @var{n}-ésimo caractere de @var{seq_caracte}.
507 O primeiro caractere em @var{seq_caracte} é retornado com @var{n} = 1.
510 @c load("stringproc")$
514 (%i1) load("stringproc")$
515 (%i2) charat("Lisp",1);
521 @deffn {Função} charlist (@var{seq_caracte})
522 Retorna a lsita de todos os caracteres em @var{seq_caracte}.
525 @c load("stringproc")$
530 (%i1) load("stringproc")$
531 (%i2) charlist("Lisp");
539 @deffn {Função} parsetoken (@var{seq_caracte})
540 @code{parsetoken} converte a primeira ficha em @var{seq_caracte} para o correspondente número ou retorna @code{false} se o número não puder ser determinado.
541 O conjunto de delimitadores para a troca de fichas é @code{@{space, comma, semicolon, tab, newline@}}
544 espaço, vírgula, ponto e vírgula, tabulação e nova linha.
547 @c load("stringproc")$
548 @c 2*parsetoken("1.234 5.678");
551 (%i1) load("stringproc")$
552 (%i2) 2*parsetoken("1.234 5.678");
556 Para analizar, pode também usar a função @code{parse_string}.
557 Veja a descrição no ficheiro 'share\contrib\eval_string.lisp'.
561 @deffn {Função} sconc (@var{expr_1}, ..., @var{expr_n})
562 Avalia seus argumentos e concatena-os em uma sequência de caracteres.
563 @code{sconc} é como @code{sconcat} mas retorna uma sequência de caracteres do Maxima.
566 @c load("stringproc")$
567 @c sconc("xx[",3,"]:",expand((x+y)^3));
571 (%i1) load("stringproc")$
572 (%i2) sconc("xx[",3,"]:",expand((x+y)^3));
573 (%o2) xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
580 @deffn {Função} scopy (@var{seq_caracte})
581 Retorna uma cópia de @var{seq_caracte} como uma nova sequência de caracteres.
585 @deffn {Função} sdowncase (@var{seq_caracte})
586 @deffnx {Função} sdowncase (@var{seq_caracte}, @var{início})
587 @deffnx {Função} sdowncase (@var{seq_caracte}, @var{início}, @var{fim})
588 Como em @code{supcase}, mas caracteres em caixa alta são convertidos para caracteres em caixa baixa.
592 @deffn {Função} sequal (@var{seq_caracte__1}, @var{seq_caracte__2})
593 Retorna @code{true} se @var{seq_caracte__1} e @var{seq_caracte__2} tiverem o mesmo comprimento e contiverem os mesmos caracteres.
597 @deffn {Função} sequalignore (@var{seq_caracte__1}, @var{seq_caracte__2})
598 Como em @code{sequal} mas igonara a caixa alta/baixa.
602 @deffn {Função} sexplode (@var{seq_caracte})
603 @code{sexplode} é um apelido para a função @code{charlist}.
607 @deffn {Função} simplode (@var{lista})
608 @deffnx {Função} simplode (@var{lista}, @var{delim})
609 @code{simplode} takes uma @code{lista} ou expressões e concatena-as em uma sequência de caracteres.
610 Se nenhum delimitador @var{delim} for usado, @code{simplode} funciona como @code{sconc} e não utiliza delimitador.
611 @var{delim} pode ser qualquer sequência de caracteres.
614 @c load("stringproc")$
615 @c simplode(["xx[",3,"]:",expand((x+y)^3)]);
616 @c simplode( sexplode("stars")," * " );
617 @c simplode( ["One","more","coffee."]," " );
620 (%i1) load("stringproc")$
621 (%i2) simplode(["xx[",3,"]:",expand((x+y)^3)]);
622 (%o2) xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
623 (%i3) simplode( sexplode("stars")," * " );
624 (%o3) s * t * a * r * s
625 (%i4) simplode( ["One","more","coffee."]," " );
626 (%o4) One more coffee.
631 @deffn {Função} sinsert (@var{seq}, @var{seq_caracte}, @var{pos})
632 Retorna uma sequência de caracteres que é uma concatenação de @code{substring (@var{seq_caracte}, 1, @var{pos} - 1)},
633 a sequência de caracteres @var{seq} e @code{substring (@var{seq_caracte}, @var{pos})}.
634 Note que o primeiro caractere está em @var{seq_caracte} e está na posição 1.
637 @c load("stringproc")$
638 @c s: "A submarine."$
639 @c sconc( substring(s,1,3),"yellow ",substring(s,3) );
640 @c sinsert("hollow ",s,3);
643 (%i1) load("stringproc")$
644 (%i2) s: "A submarine."$
645 (%i3) sconc( substring(s,1,3),"yellow ",substring(s,3) );
646 (%o3) A yellow submarine.
647 (%i4) sinsert("hollow ",s,3);
648 (%o4) A hollow submarine.
653 @deffn {Função} sinvertcase (@var{seq_caracte})
654 @deffnx {Função} sinvertcase (@var{seq_caracte}, @var{início})
655 @deffnx {Função} sinvertcase (@var{seq_caracte}, @var{início}, @var{fim})
656 Retorna @var{seq_caracte} excepto que cada caractere da posição @var{início} até a posição @var{fim} está invertido.
657 Se a posição @var{fim} não for fornecida,
658 todos os caracteres do início ao @var{fim} de @var{seq_caracte} são substituídos.
661 @c load("stringproc")$
662 @c sinvertcase("sInvertCase");
665 (%i1) load("stringproc")$
666 (%i2) sinvertcase("sInvertCase");
672 @deffn {Função} slength (@var{seq_caracte})
673 Retorna número de caracteres em @var{seq_caracte}.
677 @deffn {Função} smake (@var{num}, @var{caractere})
678 Retorna uma nova sequência de caracteres repetindo @var{num} vezes @var{caractere}.
681 @c load("stringproc")$
685 (%i1) load("stringproc")$
692 @deffn {Função} smismatch (@var{seq_caracte__1}, @var{seq_caracte__2})
693 @deffnx {Função} smismatch (@var{seq_caracte__1}, @var{seq_caracte__2}, @var{test})
694 Retorna a posição do primeiro caractere de @var{seq_caracte__1} no qual @var{seq_caracte__1} e @var{seq_caracte__2} diferem ou @code{false} em caso contrário.
695 A função padrao de teste para coincidência é @code{sequal}.
696 Se @code{smismatch} pode ignorar a caixa alta/baixa, use @code{sequalignore} como função de teste.
699 @c load("stringproc")$
700 @c smismatch("seven","seventh");
703 (%i1) load("stringproc")$
704 (%i2) smismatch("seven","seventh");
710 @deffn {Função} split (@var{seq_caracte})
711 @deffnx {Função} split (@var{seq_caracte}, @var{delim})
712 @deffnx {Função} split (@var{seq_caracte}, @var{delim}, @var{multiple})
713 Retorna a lista de todas as fichas em @var{seq_caracte}.
714 Cada ficha é uma sequência de caracteres não analisada.
715 @code{split} usa @var{delim} como delimitador.
716 Se @var{delim} não for fornecido, o caractere de espaço é o delimitador padrão.
717 @var{multiple} é uma variável booleana com @code{true} como valor padrão.
718 Multiplos delimitadores são lidos como um.
719 Essa função é útil se tabulações são gravadas com caracteres de espaço multiplos.
720 Se @var{multiple} for escolhido para @code{false}, cada delimitador é considerado.
723 @c load("stringproc")$
724 @c split("1.2 2.3 3.4 4.5");
725 @c split("first;;third;fourth",";",false);
728 (%i1) load("stringproc")$
729 (%i2) split("1.2 2.3 3.4 4.5");
730 (%o2) [1.2, 2.3, 3.4, 4.5]
731 (%i3) split("first;;third;fourth",";",false);
732 (%o3) [first, , third, fourth]
737 @deffn {Função} sposition (@var{caractere}, @var{seq_caracte})
738 Retorna a posição do primeiro caractere em @var{seq_caracte} que coincide com @var{caractere}.
739 O primeiro caractere em @var{seq_caracte} está na posição 1.
740 Para que os caracteres que coincidirem desconsiderem a caixa alta/baixa veja @code{ssearch}.
744 @deffn {Função} sremove (@var{seq}, @var{seq_caracte})
745 @deffnx {Função} sremove (@var{seq}, @var{seq_caracte}, @var{test})
746 @deffnx {Função} sremove (@var{seq}, @var{seq_caracte}, @var{test}, @var{início})
747 @deffnx {Função} sremove (@var{seq}, @var{seq_caracte}, @var{test}, @var{início}, @var{fim})
748 Retorna uma sequência de caracteres como @var{seq_caracte} mas com todas as subsequências de caracteres que coincidirem com @var{seq}.
749 A função padrão de teste de coincidência é @code{sequal}.
750 Se @code{sremove} puder ignorar a caixa alta/baixa enquanto busca por @var{seq}, use @code{sequalignore} como teste.
751 Use @var{início} e @var{fim} para limitar a busca.
752 Note que o primeiro caractere em @var{seq_caracte} está na posição 1.
755 @c load("stringproc")$
756 @c sremove("n't","I don't like coffee.");
757 @c sremove ("DO ",%,'sequalignore);
760 (%i1) load("stringproc")$
761 (%i2) sremove("n't","I don't like coffee.");
762 (%o2) I do like coffee.
763 (%i3) sremove ("DO ",%,'sequalignore);
769 @deffn {Função} sremovefirst (@var{seq}, @var{seq_caracte})
770 @deffnx {Função} sremovefirst (@var{seq}, @var{seq_caracte}, @var{test})
771 @deffnx {Função} sremovefirst (@var{seq}, @var{seq_caracte}, @var{test}, @var{início})
772 @deffnx {Função} sremovefirst (@var{seq}, @var{seq_caracte}, @var{test}, @var{início}, @var{fim})
773 Como em @code{sremove} excepto que a primeira subsequência de caracteres que coincide com @code{seq} é removida.
777 @deffn {Função} sreverse (@var{seq_caracte})
778 Retorna uma sequência de caracteres com todos os caracteres de @var{seq_caracte} em ordem reversa.
782 @deffn {Função} ssearch (@var{seq}, @var{seq_caracte})
783 @deffnx {Função} ssearch (@var{seq}, @var{seq_caracte}, @var{test})
784 @deffnx {Função} ssearch (@var{seq}, @var{seq_caracte}, @var{test}, @var{início})
785 @deffnx {Função} ssearch (@var{seq}, @var{seq_caracte}, @var{test}, @var{início}, @var{fim})
786 Retorna a posição da primeira subsequência de caracteres de @var{seq_caracte} que coincide com a sequência de caracteres @var{seq}.
787 A função padrão de teste de coincidência é @code{sequal}.
788 Se @code{ssearch} puder igonorar a caixa alta/baixa, use @code{sequalignore} como função de teste.
789 Use @var{início} e @var{fim} para limitar a busca.
790 Note que o primeiro caracter em @var{seq_caracte} está na posição 1.
793 (%i1) ssearch("~s","~@{~S ~@}~%",'sequalignore);
799 @deffn {Função} ssort (@var{seq_caracte})
800 @deffnx {Função} ssort (@var{seq_caracte}, @var{test})
801 Retorna uma sequência de caracteres que contém todos os caracteres de @var{seq_caracte} em uma ordem tal que não existam dois caracteres @var{c} sucessivos e @var{d} seja tal que @code{test (@var{c}, @var{d})} seja @code{false} e @code{test (@var{d}, @var{c})} seja @code{true}.
802 A função padrão de teste para ordenação é @var{clessp}.
803 O conjunto de funções de teste é @code{@{clessp, clesspignore, cgreaterp, cgreaterpignore, cequal, cequalignore@}}.
806 @c load("stringproc")$
807 @c ssort("I don't like Mondays.");
808 @c ssort("I don't like Mondays.",'cgreaterpignore);
811 (%i1) load("stringproc")$
812 (%i2) ssort("I don't like Mondays.");
813 (%o2) '.IMaddeiklnnoosty
814 (%i3) ssort("I don't like Mondays.",'cgreaterpignore);
815 (%o3) ytsoonnMlkIiedda.'
820 @deffn {Função} ssubst (@var{nova}, @var{antiga}, @var{seq_caracte})
821 @deffnx {Função} ssubst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test})
822 @deffnx {Função} ssubst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test}, @var{início})
823 @deffnx {Função} ssubst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test}, @var{início}, @var{fim})
824 Retorna uma sequência de caracteres como @var{seq_caracte} excepto que todas as subsequências de caracteres que coincidirem com @var{antiga} são substituídas por @var{nova}.
825 @var{antiga} e @var{nova} não precisam ser de mesmo comprimento.
826 A função padrão de teste para coincidência é para coincidências é @code{sequal}.
827 Se @code{ssubst} puder ignorar a cixa alta/baixa enquanto procurando por @var{antiga}, use @code{sequalignore} como função de teste.
828 Use @var{início} e @var{fim} para limitar a busca.
829 Note que o primeiro caractere em @var{seq_caracte} está na posição 1.
832 @c load("stringproc")$
833 @c ssubst("like","hate","I hate Thai food. I hate green tea.");
834 @c ssubst("Indian","thai",%,'sequalignore,8,12);
837 (%i1) load("stringproc")$
838 (%i2) ssubst("like","hate","I hate Thai food. I hate green tea.");
839 (%o2) I like Thai food. I like green tea.
840 (%i3) ssubst("Indian","thai",%,'sequalignore,8,12);
841 (%o3) I like Indian food. I like green tea.
846 @deffn {Função} ssubstfirst (@var{nova}, @var{antiga}, @var{seq_caracte})
847 @deffnx {Função} ssubstfirst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test})
848 @deffnx {Função} ssubstfirst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test}, @var{início})
849 @deffnx {Função} ssubstfirst (@var{nova}, @var{antiga}, @var{seq_caracte}, @var{test}, @var{início}, @var{fim})
850 Como em @code{subst} excepto que somente a primeira subsequência de caracteres que coincidir com @var{antiga} é substituída.
854 @deffn {Função} strim (@var{seq},@var{seq_caracte})
855 Retorna uma sequência de caracteres como @var{seq_caracte},
856 mas com todos os caracteres que aparecerem em @var{seq} removidos de ambas as extremidades.
859 @c load("stringproc")$
865 (%i1) load("stringproc")$
866 (%i2) "/* comment */"$
867 (%i3) strim(" /*",%);
875 @deffn {Função} striml (@var{seq}, @var{seq_caracte})
876 Como em @code{strim} excepto que somente a extremidade esquerda de @var{seq_caracte} é recordada.
880 @deffn {Função} strimr (@var{seq}, @var{seq_caracte})
881 Como em @code{strim} excepto que somente a extremidade direita de sequência de caracteres é recortada.
885 @deffn {Função} substring (@var{seq_caracte}, @var{início})
886 @deffnx {Função} substring (@var{seq_caracte}, @var{início}, @var{fim})
887 Retorna a subsequência de caracteres de @var{seq_caracte} começando na posição @var{início} e terminando na posição @var{fim}.
888 O caractere na posição @var{fim} não é incluído.
889 Se @var{fim} não for fornecido, a subsequência de caracteres contém o restante da sequência de caracteres.
890 Note que o primeiro caractere em @var{seq_caracte} está na posição 1.
893 @c load("stringproc")$
894 @c substring("substring",4);
898 (%i1) load("stringproc")$
899 (%i2) substring("substring",4);
901 (%i3) substring(%,4,6);
907 @deffn {Função} supcase (@var{seq_caracte})
908 @deffnx {Função} supcase (@var{seq_caracte}, @var{início})
909 @deffnx {Função} supcase (@var{seq_caracte}, @var{início}, @var{fim})
910 Retorna @var{seq_caracte} excepto que caracteres em caixa baixa a partir da posição @var{início} até a posição @var{fim} são substituídos pelo correspondente caracteres em cixa alta.
911 Se @var{fim} não for fornecido,
912 todos os caracteres em caixa baixa de @var{início} até o fim de @var{seq_caracte} são substituídos.
915 @c load("stringproc")$
916 @c supcase("english",1,2);
919 (%i1) load("stringproc")$
920 (%i2) supcase("english",1,2);
926 @deffn {Função} tokens (@var{seq_caracte})
927 @deffnx {Função} tokens (@var{seq_caracte}, @var{test})
928 Retorna uma lista de fichas, que tiverem sido extrídos de @var{seq_caracte}.
929 As fichas são subsequências de caracteres cujos caracteres satisfazem a uma determinada função de teste.
930 Se o teste não for fornecido, @var{constituent} é usada como teste padrão.
931 @code{@{constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp, characterp, alphanumericp@}} é o conjunto de fnç~oes de teste.
932 (A versão Lisp de @code{tokens} é escrita por Paul Graham. ANSI Common Lisp, 1996, page 67.)
935 @c load("stringproc")$
936 @c tokens("24 October 2005");
937 @c tokens("05-10-24",'digitcharp);
938 @c map(parsetoken,%);
941 (%i1) load("stringproc")$
942 (%i2) tokens("24 October 2005");
943 (%o2) [24, October, 2005]
944 (%i3) tokens("05-10-24",'digitcharp);
946 (%i4) map(parsetoken,%);