Aplicar lambda con getvar
3 participantes
Página 1 de 1.
Aplicar lambda con getvar
Hola muchachos como están.
Sera que me dan una ayuda con esto.
Estoy tratando de sustraer los valores de unas variables.
Esta es la lista que tengo.
Y estoy tratando de solucionarlo de la siguiente manera.
Para guardarlos en una variable.
Porque de este modo? porque hay variables que no existen en todos los autocad, no recuerdo bien si meshtype es una de ellas, pero al no encontrar la variable arroja un error y no pasa de ahí con las siguientes variables.
El resultado debería ser una nueva lista como esta.
De ante mano muchas gracias.
Sera que me dan una ayuda con esto.
Estoy tratando de sustraer los valores de unas variables.
Esta es la lista que tengo.
- Código:
(setq lista '("cmdecho" "osmode" "meshtype" "3dosmode" "orthomode"))
Y estoy tratando de solucionarlo de la siguiente manera.
- Código:
(mapcar '(lambda (x)
(vl-catch-all-apply 'getvar (cons (car x) (cadr x))))
lista)
Para guardarlos en una variable.
Porque de este modo? porque hay variables que no existen en todos los autocad, no recuerdo bien si meshtype es una de ellas, pero al no encontrar la variable arroja un error y no pasa de ahí con las siguientes variables.
El resultado debería ser una nueva lista como esta.
- Código:
(("cmdecho" . 1) ("osmode" . 1) ("meshtype" . 0) ("3dosmode" . 31) ("orthomode" . 0))
De ante mano muchas gracias.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Aplicar lambda con getvar
Trata con esto, el cons lo pones dentro del aplly, y debe ir fuera
- Código:
(mapcar '(lambda (x)
(cons x (vl-catch-all-apply 'getvar (list x))))
lista)
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Aplicar lambda con getvar
Hola Marco Jacinto, como has estado.
La acabo de revisar y funciona bien, no estaba muy lejos de como la llevaba. Jejejeje.
Pero ahora hay un problema, si la variable no existe la deja en la lista final y necesito que quede solo lo que si existe.
Por ejemplo, estoy aplicando el código que me presentas a esta nueva lista.
En este caso da como resultado.
Si te fijas casa no es una variable.
Deberia quedar sin casa, para yo despues trabajar solo con lo que realmente debe ser.
Deberia quedar de la siguiente manera.
Gracias por tu ayuda.
La acabo de revisar y funciona bien, no estaba muy lejos de como la llevaba. Jejejeje.
Pero ahora hay un problema, si la variable no existe la deja en la lista final y necesito que quede solo lo que si existe.
Por ejemplo, estoy aplicando el código que me presentas a esta nueva lista.
- Código:
(setq lista '("casa" "cmdecho" "osmode" "meshtype" "3dosmode" "orthomode"))
En este caso da como resultado.
- Código:
(("casa") ("cmdecho" . 1) ("osmode" . 1) ("meshtype" . 0) ("3dosmode" . 31) ("orthomode" . 0))
Si te fijas casa no es una variable.
Deberia quedar sin casa, para yo despues trabajar solo con lo que realmente debe ser.
Deberia quedar de la siguiente manera.
- Código:
(("cmdecho" . 1) ("osmode" . 1) ("meshtype" . 0) ("3dosmode" . 31) ("orthomode" . 0))
Gracias por tu ayuda.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Aplicar lambda con getvar
mira
- Código:
(foreach x lista
(if (setq val(vl-catch-all-apply 'getvar (list x)))
(setq lst(cons (cons x val)lst))
)
)
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Aplicar lambda con getvar
Por si te sirve, yo aplico esto en mis rutinas,
Salvo el estado de las variables de la lista
No varío el contenido ni de lista ni de old y al final de la rutina devuelvo los valores con
Un saludo
Salvo el estado de las variables de la lista
- Código:
(setq lista '(cmdecho osmode meshtype 3dosmode orthomode))
(setq old(mapcar 'getvar lista))
- Código:
(setq lista '(cmdecho osmode meshtype 3dosmode orthomode prpe))
(mapcar 'getvar lista)
(1 16896 1 0 0 nil)
No varío el contenido ni de lista ni de old y al final de la rutina devuelvo los valores con
- Código:
(mapcar 'setvar lista old)
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Aplicar lambda con getvar
Hola Marco Jacinto, como estas.
Funciona muy bien, muchas gracias.
Hola nolo, gracias a ti también, ese dato de eliminar las comillas fue muy bueno, ahorras mas trabajo aun. Jejejeje.
Hasta que respondió Marco todo iba bien, ahora que veo lo de nolo me surgió otra duda.
Yo guardo la lista y la variable que no exista queda como nil.
Hasta ahí claro.
Pero el detalle viene cuando la variable no existe, al querer aplicarle el setvar da un error.
Por eso buscaba la manera de eliminar el nil y con lo de Marco estaba completo, peroahora me doy cuenta que si elimino los nil los valores que le quiero aplicar a las variables no coincidirían porque la lista de variables se reduciría solo a lo que existe.
No se si me he explicado bien.
Por ejemplo, si tengo 10 variables, tengo 10 valores a aplicar a esas variables, si alguna variable no existe la elimino, entonces me quedarían 9 variables pero seguiría manteniendo los diez valores que quiero aplicar, pero al haber eliminado alguna variable los valores no coincidirían con la variable que le toca.
De todas maneras, según lo de nolo, aquí coloco una lista como ejemplo.
Y como siempre, muchísimas gracias por la ayuda.
Funciona muy bien, muchas gracias.
Hola nolo, gracias a ti también, ese dato de eliminar las comillas fue muy bueno, ahorras mas trabajo aun. Jejejeje.
Hasta que respondió Marco todo iba bien, ahora que veo lo de nolo me surgió otra duda.
Yo guardo la lista y la variable que no exista queda como nil.
Hasta ahí claro.
Pero el detalle viene cuando la variable no existe, al querer aplicarle el setvar da un error.
Por eso buscaba la manera de eliminar el nil y con lo de Marco estaba completo, peroahora me doy cuenta que si elimino los nil los valores que le quiero aplicar a las variables no coincidirían porque la lista de variables se reduciría solo a lo que existe.
No se si me he explicado bien.
Por ejemplo, si tengo 10 variables, tengo 10 valores a aplicar a esas variables, si alguna variable no existe la elimino, entonces me quedarían 9 variables pero seguiría manteniendo los diez valores que quiero aplicar, pero al haber eliminado alguna variable los valores no coincidirían con la variable que le toca.
De todas maneras, según lo de nolo, aquí coloco una lista como ejemplo.
- Código:
(setq lista '(cmdecho casa osmode meshtype 3dosmode orthomode prpe))
(setq old (mapcar 'getvar lista))
(mapcar 'setvar lista '(0 0 0 0 0 1 1))
(mapcar 'setvar lista old)
Y como siempre, muchísimas gracias por la ayuda.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Aplicar lambda con getvar
Para eso están los condicionales
Un saludo
- Código:
(setq lista '(cmdecho casa osmode meshtype 3dosmode orthomode prpe))
(setq old (mapcar 'getvar lista))
(mapcar '(lambda(a b) (if b (setvar a b))) lista old)
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Aplicar lambda con getvar
Mi recomendacion es siempre correlacionar los valores a la variable, si te basas solo en el orden, si en algún momento lo cambias y no lo estableces para ambas listas, tendrás problemas.
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Aplicar lambda con getvar
Hola muchachos como estan.
La de nolo funciona con la nueva condicional. Gracias.
Pero le voy a hacer caso a Marco Jacinto, por si en algún momento se me descuadra alguna lista, prefiero asegurar que este todo en su lugar.
Mil gracias, ya lo solucione y estoy mas tranquilo.
Saludos.
La de nolo funciona con la nueva condicional. Gracias.
Pero le voy a hacer caso a Marco Jacinto, por si en algún momento se me descuadra alguna lista, prefiero asegurar que este todo en su lugar.
Mil gracias, ya lo solucione y estoy mas tranquilo.
Saludos.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|