Pregunta

Tengo el siguiente código dentro de una función que está leyendo en un archivo que es un mapa. Me aparece un error que *numrows* es una dimensión ilegal. Creo que esto se debe a que Lisp está procesando estas variables en paralelo. ¿Cómo puedo solucionar este problema?

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
¿Fue útil?

Solución

Usted está mal diagnóstico del problema. El primer argumento que está pasando para hacer-matriz es una lista de dos símbolos, * * y * numRows númeroColumnas *. Sin embargo, el primer argumento para hacer-matriz debe ser una lista de números enteros no negativos. La forma más fácil de reparar su ejemplo es hacer una lista con los valores de en lugar de: (aún númeroFilas * * * * númeroColumnas). Así que el código sería el siguiente lugar:

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array (list *numrows* *numcols*) :initial-element nil))

normalmente no usar setq así, sin embargo. Probablemente sería mejor, dependiendo del contexto, para unir esas variables con let *:

(let* ((numrows (read map))
       (numcols (read map))
       (map-array (make-array (list numrows numcols) :initial-element nil))
  ; do something with map-array
  )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top