Anda di halaman 1dari 9

AutoLISP Leccin 9 - ESTRUCTURAS DE

DATOS
(Abril de 1999) Todas las estructuras de datos en AutoLISP son la lista de. Todo en
AutoLISP es una lista, si no es una funcin, que es una lista. Si se trata de una lista, que
es una estructura de datos.
Una lista no es ms que una sola matriz de dimensin. Si usted tiene una lista de listas,
entonces usted tiene un matrices de dos dimensiones. Incluso es posible anidar listas en
dos dimensiones, dentro de otra lista de dos dimensiones. No estoy seguro de lo que
ustedes llamaran, pero yo dira que es un lo. Si anida sus listas demasiado
profundamente, las cosas pueden ir de las manos. Como habrs adivinado, AutoLISP
tiene muchas funciones predefinidas para trabajar con listas.
Contenido
[hide]
1 Funciones de lista:
2 Arrays
3 listas unidimensionales
3.1 Creacin de listas unidimensionales
3.2 Acceso a listas dimensionales individuales
3.3 Modificacin de listas dimensionales individuales
3.4 Uso de listas unidimensionales
3,5 arrays multidimensionales
4 Ms Lecciones
Funciones de lista:
append (aadir exp ...)
(Append '(1 2) "(3 4)); Devoluciones (1 2 3 4)
Toma cualquier nmero de listas y los combina en una sola lista.
aplicar (solicitar lista exp)
(Aplicar '+' (1 2 3); Devuelve 6
Ejecuta la funcin "exp" utilizando los elementos de la lista como parmetros a la funcin.
asoc (punto asoc alist)
(Asoc 1 '((1 "David") (2 "Allen") (3 "Seibert)))
; Devoluciones (1 "David")
Busca una lista de asociacin utilizando "item" como la clave, devuelve la entrada
asociada.
coche (lista de coche)
(Car '(1 2 3 4)); Devuelve 1
Devuelve el primer elemento de la lista.
cdr (cdr lista)
(Cdr '(1 2 3 4)); Returns (2 3 4)
Devuelve una lista que contiene todos menos el primer elemento de la lista.
contras (lista de contras artculo)
(cons 0 '(1 2 3)); Devoluciones (0 1 2 3 4)
Devuelve una lista con los "elementos" como el nuevo primer elemento de la lista.
foreach (nombre foreach lista exp)
(Foreach n '(1 2 3 4) (+ n 1))
; Returns (2 3 4 5)
Pasos a travs de una lista y evala cada expresin para cada elemento de la lista.
pasado (ltimo exp ...)
(1 2 3 4 ltima); Devuelve 4
Devuelve el ltimo elemento de una lista
list (lista de exp ...)
(Lista 1 2 3 4); Devoluciones (1 2 3 4)
Crea una lista de una serie de expresiones.
mapcar (funcin mapcar lista1 ... listn)
(Mapcar '*' (1 2 3) (4 5 6)
; Returns (4 10 18)
Devuelve una lista que ser el resultado de la ejecucin de una funcin con los tems de
las listas suministradas.
Miembro (miembro de la lista exp)
(Miembro 2 '(1 2 3)); Returns (2 de 3)
Busca en una lista para una aparicin de una expresin y devuelve el resto de la lista que
comienza con la primera aparicin de la expresin.
nth (lista de n-simo)
(Nth 2 '(1 2 3 4)); Devuelve 2
Devuelve la "n" th elemento de la "lista".
reverse (lista inversa)
(Inversa '(1 2 3)); Returns (3 2 1)
Devuelve la lista consigo de elementos invertidos.
subst (subst newitem olditem lista)
(Subst 5 2 '(1 2 3 4)); Devoluciones (1 5 3 4)
Devuelve una lista con "newitem" en lugar de todas las apariciones de "olditem".
Como puede ver, casi todo lo que quieras hacer a una lista, se puede hacer uso de la
funcin predefinida para el manejo de la lista.
Arrays
Una lista de AutoLISP, es nada menos que una sola matriz dimensional en cualquier otro
idioma. Cuando empezamos en las listas de listas, me referir a ellos como arrays. Por
ahora vamos a aprender cmo lidiar con una lista.
Listas unidimensionales
Creacin de listas unidimensionales
Los CONS, APPEND y funciones de lista son la lista bsica la creacin de funciones.
Combinando cualquiera de estas funciones con la funcin setq puede crear una lista. La
funcin CITA tambin puede ser usado para crear una lista como se ver en los ejemplos
a seguir.
Las funciones de lista y la cita se utilizan cuando se desea crear una lista esttica de
materiales. Es decir, se crean listas de artculos cuando usted sabe lo que quiere en las
listas contengan. La funcin de "lista" tambin se puede combinar con otras funciones
Lisp, para crear listas dinmicas, pero no muy a menudo.
(Setq LIST_NAME (lista 1 2 3)); Devoluciones (1 2 3)
Si ahora comprobamos la unin de LIST_NAME, encontraremos que est obligado a la
lista (1 2 3). Una lista es el dispositivo de almacenamiento bsico de AutoLISP. Cada
estructura vamos a ver no es ms que una lista, y una lista no es ms que una sola matriz
dimensionada. Utilizando la funcin de presupuesto tambin podra haber creado la lista
anterior.
(Setq LIST_NAME (cita (1 2 3)))
(Setq LIST_NAME '(1 2 3))
Cualquiera de los mecanismos de cotizacin se debe. Esta es probablemente la forma
ms fcil de crear una lista cuando se sabe de antemano lo que usted quiere que su lista
de contener.
Los CONS y funciones APPEND se utilizan para crear listas dinmicas. Es decir, se
crean lista donde no sabemos de antemano lo que la lista contendr, y que tipo de
construir la lista "sobre la marcha". El comando CONS es la lista constructor bsico, que
crea listas aadiendo elementos al frente de la lista. Usted debe dar CONS el elemento
que desee agregar a la lista, y la lista que desea que el elemento aadido a.
(Setq LIST_NAME (cons artculo LIST_NAME))
La lista de arriba muestra cmo utilizar las CONS funcionan para crear una lista. La
funcin APPEND tomar cualquier nmero de listas y combinarlos en una sola lista. La
cosa a recordar con la funcin APPEND es los elementos que se le pasan deben ser
listas.
(Setq LIST_NAME (append '(1 2 3) (4 5 6)))
; Devoluciones (1 2 3 4 5 6)
Como usted debe ser capaz de ver a estas alturas, la creacin de listas es una operacin
de avance semi-recta. A continuacin vamos a aprender cmo tener acceso a las listas,
que es igual de fcil.
El acceso a las listas de dimensiones individuales
Para extraer valores de una lista hay varias funciones que podemos usar. CAR y CDR
son dos de las formas ms populares de conseguir los datos de una lista. Si utilizamos la
funcin CAR recuperar el primer elemento de la lista.
(Car '(4 5 6)); Devuelve 4
CDR recuperar la lista que comienza con el segundo elemento y continuar hasta el final.
(Cdr '(4 5 6)); Returns (5 de 6)
Estas dos funciones se pueden anidar entre s hasta cuatro niveles de profundidad. Lo
que esto significa es que si quieres slo el segundo elemento de la lista, puede combinar
estas dos funciones a slo devuelve el segundo elemento. Vamos a CDR luego CAR la
lista. Esto nos da la lista desde el segundo punto y, a continuacin, obtiene el primer
elemento de la nueva lista.
(Cadr '(4 5 6)); Devuelve 5
Si quisiramos obtener el tercer elemento de la lista que podemos hacer esto tambin.
Nos combinamos CDR CDR CAR para llegar al tercer punto.
(Caddr '(4 5 6)); Devuelve 6
La primera vez que mire esta manera de recuperar los datos de una lista, puede parecer
el camino ms largo, pero hay momentos en los que estas funciones pueden ser muy
tiles. Todo lo que tienes que hacer para ver lo tiles que son, es recordar que un punto
es una lista de los tres valores de X, Y y Z. Recuerde estas funciones ms adelante
cuando hablemos de las listas asociados. La funcin LAST se puede utilizar para
recuperar el ltimo elemento de una lista. Si usted sabe que el ltimo elemento de la lista
es el que usted quiere, esta es la funcin de su uso.
La funcin memeber le indica si un elemento se encuentra en una lista. Por lo general,
use esto antes de la funcin SUBST. Antes de que pueda sustituir a un elemento de una
lista que tiene que saber si se trata de un miembro de la lista. La funcin de miembro le
dir si un elemento es un miembro de una lista dada. La funcin NTH para recuperar
datos de una lista en una ubicacin especificada. La funcin nth es til cuando se sabe
exactamente a dnde va en la lista.
(Nth 3 '(2 3 4 5 6)); Devuelve 4
Eso fue muy fcil. La funcin NTH se utiliza normalmente con un ndice de caminar a
travs de una lista de un solo paso a la vez. Cuando buscamos una lista para un cierto
valor, vamos a establecer un ndice y utilizar la funcin NTH, junto con un incrementador
del ndice para desplazarse por la lista.
(Mientras, mientras
(Y
(Ensima LIST_NAME Ndx), hay todava
; Elementos de la lista
(/ = (Nth LIST_NAME Ndx) search_item)), y no son lo
, Estamos buscando
(= Ndx (+ Ndx 1))); incrementar el ndice de
El bit de cdigo anterior le echemos un vistazo a travs de la lista hasta que se produce
una de dos cosas. O nos encontramos lo que estamos buscando o nos quedamos sin
elementos. Lo nico que tiene que hacer antes de ejecutar el cdigo anterior es inicializar
su Ndx, LIST_NAME y el search_item.
Si la lista de que se trata de una lista de "asociacin", tendr que utilizar la funcin
ASSOC para acceder a esta lista. La funcin ASSOC busca en una lista para una clave, y
volver lo lista que se encontr que contena esa tecla. Si desea almacenar variables y sus
valores en una lista, probablemente utilizar una lista de asociacin para almacenarlos.
La lista de asociacin est establecido como en el siguiente ejemplo.
(LIST_NAME setq
(Lista
(1 "Este") (2 "es") (3 "an") (4 "asociacin") (5 "lista")))
Ahora puede introducir en los nmeros para obtener los datos de la lista. La mayora del
tiempo que va a utilizar la funcin "cadr" para acceder a los datos en la lista. Si no lo hizo,
los siguientes ejemplos le mostrarn lo que sucede.
(Asoc 1 LIST_NAME); Devoluciones (1 "Este")
(Asoc 4 LIST_NAME); Returns ("asociacin" 4)
(Cadr (asoc 2 LIST_NAME)); Returns "es"
(Cadr (asoc 5 LIST_NAME)); Returns "lista"
Como se puede ver la funcin ASSOC por s mismo no es tan til, pero si se combina con
la funcin de CADR se puede llegar a todos los datos que necesita.
La modificacin de las listas de dimensiones individuales
La funcin APLICABLE ejecuta una funcin utilizando las listas que los argumentos de la
funcin. Es til para el total de los nmeros guardados en una lista.
(Aplicar '+ (23 12 -10)); Devuelve 25
APLIQUE se puede utilizar con cualquier funcin, y pasar los elementos de la lista,
empezando de izquierda a derecha, como los parmetros de la funcin. Si la funcin que
est utilizando tiene un parmetro y luego se pasa un elemento de la lista a la vez. Si la
funcin necesita dos parmetros luego se pasarn dos elementos de la lista.
La funcin FOREACH se utiliza para hacer los cambios de masa a una lista. Funciona en
todos los elementos de la lista y hace el mismo cambio en cada artculo. Digamos que
hemos recogido algunos datos del usuario en una lista, y queremos comprobar las
respuestas que el usuario dio, con algunas constantes. Lo primero que queremos hacer
es convertir toda la respuesta a maysculas as que todo lo que tenemos que hacer es
comprobar cadenas en maysculas. As es como nos gustara configurar la funcin para
convertir a maysculas.
(N ans_list foreach (strcase n))
Esto devolver una lista con cada cadena de la lista convertida en maysculas.
La siguiente funcin voy a hablar para conseguir dentro de sus listas, es la funcin
SUBST. La funcin SUBST se utiliza para modificar los datos de sus listas. La funcin
SUBST hace exactamente lo que suena, sustituye un elemento de datos en la lista para
otro. La explicacin que se da en las definiciones de las funciones anteriores debe ser
suficiente para que te vas con SUBST.
El uso de listas unidimensionales
La funcin mapcar pasar los elementos a partir de dos o ms listas como los parmetros
para una funcin. Mapcar devuelve una nueva lista como el resultado de pasar los viejos
listas para la funcin. Esto es muy til para crear nuevas listas de puntos de las listas que
contienen la "x" y las coordenadas "y".
(Point_list setq (mapcar 'y_list lista x_list))
Arrays multidimensionales
Podemos usar las mismas funciones para crear matrices que se utilizan para las listas, ya
que una serie no es ms que una lista. A veces es ms fcil pensar en las cosas en el
contexto de una matriz que tratar de verlos como listas. Una lista tiende a ser una larga
serie de artculos, en una matriz es un elemento ms estructurado.
El smbolo de cotizacin ser utilizado para la colocacin de matrices cuando sabemos lo
que estamos poniendo en la matriz. Una serie de datos constante es una matriz tal, y el
listado a continuacin muestra como se distribuyen tal matriz. Esta es una lista del
dimetro "tap" y los dimetros de perforacin "del grifo" para algunos tamaos de tornillo
populares.
(Setq BigTapList
'(
(("Nombre" "# 3") ("Toque" 0.099) ("TDrill" 0.0785))
(("Nombre" "# 4") ("Toque" 0.112) ("TDrill" 0,0890))
(("Nombre" "# 5") ("Toque" 0.125) ("TDrill" 0.1015))
(("Nombre" "# 6") ("Toque" 0.138) ("TDrill" 0.1065))
(("Nombre" "# 8") ("Toque" 0.164) ("TDrill" 0,1360))
(("Nombre" "# 10") ("Toque" 0.1875) ("TDrill" 0.1495))
(("Nombre" "1/4") ("Toque" 0,2500) ("TDrill" 0,2010))
(("Nombre" "5/16") ("Toque" 0,3125) ("TDrill" 0,2570))
(("Nombre" "3/8") ("Toque" 0.375) ("TDrill" 0.3125))
(("Nombre" "1/2") ("Toque" 0.500) ("TDrill" 0.4219))
(("Nombre" "5/8") ("Toque" 0.625) ("TDrill" 0,5469))
(("Nombre" "3/4") ("Toque" 0.750) ("TDrill" 0.6563))
(("Nombre" "M3") ("Toque" 0,11811024) ("TDrill" 0.09842520))
(("Nombre" "M4") ("Toque" 0,15748032) ("TDrill" 0.12992126))
(("Nombre" "M5") ("Toque" 0,19685039) ("TDrill" 0.16535433))
(("Nombre", "M6") ("Toque" 0,23622047) ("TDrill" 0.19685039))
(("Nombre" "M8") ("Toque" 0,31496063) ("TDrill" 0.26574803))
(("Nombre" "M10") ("Toque" 0,39370079) ("TDrill" 0.33464567))
(("Nombre" "M12") ("Toque" 0,47244094) ("TDrill" 0.40354331))
(("Nombre" "M16") ("Toque" 0,62992126) ("TDrill" 0.55118110))
(("Nombre" "M20") ("Toque" 0,78740157) ("TDrill" 0.68897638))))
Colocacin de la lista anterior en la forma de una matriz hace que la lista ms fcil de ver
y tratar. Me haba puesto cada elemento de la lista final a extremo, hubiera sido
extremadamente difcil de ver lo que haba en la lista. La disposicin anteriormente me
permite ver todas las listas de la matriz, y cuando estoy escribiendo mis rutinas de acceso
que ser capaz de decir qu tan profundo en la matriz que tengo que cavar.
Para hacer una funcin completa que devolver la lista a mi funcin de llamada yo aadira
el siguiente cdigo. Al obtener mi lista de tamaos de taladro como este, no necesita
tener toda la BigTapList en la memoria para toda la duracin de mi programa. Yo slo
puedo obtener los datos que necesito y dejar que el resto desaparece con la funcin para
recuperar los datos.
(Get_tap_list defun (TapSize
/
BigTapList
TapNdx
TapList)
(Setq BigTapList
; Palabra clave
; Va aqu
)
(Setq TapNdx 0
TapList (BigTapList coche))
(Mientras
(/ = TapSize (cadr (asoc TapList "Nombre")))
(TapList setq (ensima TapNdx BigTapList))
(Setq TapNdx (+ TapNdx 1)))
(Coche (lista TapList))
)
Haciendo cosas las maneras que he muestran arriba mantenemos slo que los datos que
necesitamos. Cualquier dato que no va a ser utilizado por el programa no debera existir.
La memoria es grande y barato en estos das, pero todava tenemos que utilizar buenas
prcticas de programacin para que no queden atrapados con la guardia baja por
cualquier cosa.

Anda mungkin juga menyukai