2011-04-18 16 views
5

Tengo dos problemas mientras trabajo en Lisp y no encuentro ningún tutorial o sitio que lo explique. ¿Cómo se divide una cadena en sus caracteres individuales? ¿Y cómo podría cambiar esos caracteres en sus valores ASCII correspondientes? Si alguien conoce algún sitio o video tutorial que los explique, sería muy apreciado.División de cadena en caracteres individuales

Respuesta

9
CL-USER 87 > (coerce "abc" 'list) 
(#\a #\b #\c) 


CL-USER 88 > (map 'list #'char-code "abc") 
(97 98 99) 

Consiga el Common Lisp Quick Reference.

+0

enlace a "Referencia rápida de Common Lisp" tristemente está muerto. –

+0

@ Reb.Cabin: arreglado. –

0

split-string divide la cadena en subcadenas en función de los separadores de expresiones regulares Cada coincidencia para separadores define un punto de división; las subcadenas entre los puntos de división se convierten en una lista, que se devuelve. Si omitir-nulos es nulo (u omitido), el resultado contiene cadenas nulas siempre que haya dos coincidencias consecutivas para los separadores, o una coincidencia es adyacente al comienzo o al final de la cadena. Si omit-nulls es t, estas cadenas nulas se omiten del resultado. Si los separadores son nulos (u omitidos), el valor predeterminado es split-string-default-separators.

Como un caso especial, cuando los separadores son nil (u omitidos), las cadenas nulas siempre se omiten del resultado. Por lo tanto:

(split-string " two words ") -> ("two" "words") 
The result is not ("" "two" "words" ""), which would rarely be useful. If you need 
such a result, use an explicit value for separators: 
(split-string " two words " split-string-default-separators) -> ("" "two" "words" "") 

More examples: 
(split-string "Soup is good food" "o") -> ("S" "up is g" "" "d f" "" "d") 
(split-string "Soup is good food" "o" t) -> ("S" "up is g" "d f" "d") 
(split-string "Soup is good food" "o+") -> ("S" "up is g" "d f" "d") 
+0

Entonces, usando una cadena dividida, ¿es posible separar una cadena en los caracteres o sería eso para un separador de caracteres? –

0

También puede usar elt o aref para obtener caracteres específicos de una cadena.

Uno de los mejores sitios para una introducción en profundidad a Common Lisp es el sitio para el Practical Common Lisp book(). El libro completo está disponible en línea de forma gratuita. Echale un vistazo.

+0

¿Qué pasa si no sé cuántos caracteres hay en la cadena? ¿Elt y aref todavía estarían bien para usar entonces? –

+0

@ user710086: puede usar 'length' para obtener la longitud de una cadena. Además de 'elt', que funciona para cualquier secuencia, y' aref', que funciona para cualquier matriz, también puede usar la función 'char' que se debe usar solo con cadenas. –

1

Una cadena Lisp ya está dividida en sus caracteres, de alguna manera. Es un vector de caracteres y, dependiendo de lo que necesite hacer, puede usar operaciones de cadenas enteras o cualquier operación aplicable a vectores (como todas las operaciones del protocolo de secuencia) para manejar los caracteres individuales.

Cuestiones relacionadas