Pregunta

lo que está mal con este código en Dr.Scheme usando Bastante grande? Me parece recordar hacer cosas similares en el pasado sin ningún problema.

(lambda (x y) (set! (Frame-variables res) (append (Frame-variables res) (list (cons x y)))))

que devuelve el error siguiente:

  

set!: not an identifier in: (Frame-variables res)

Si Omito la parte (set! (Frame-variables res) ... ) funciona bien, excepto, por supuesto, que mi lista no cambia realmente. por lo que reconoce el segundo (Frame-varialbes res) pero no el primero? o lo que es el trato con set! en ese contexto?

esperamos que reconocer que tengo una estructura llamada Frame con un campo variables que es una lista.

¿Fue útil?

Solución

El problema:

¿Cómo establece! trabajos. Lo que realmente hace es enlazar un nombre a un objeto que está dando vueltas en la memoria alguna parte. Cuando usted configura !, cambia lo que se refiere al nombre.

Ese es el error: (Frame-variables res) no es un identificador, por lo que no puede hacer que se refiere a otra cosa

.

La solución:

Lo que estamos tratando de hacer es mutar un miembro de una estructura. Lo que hay que hacer es cambiar la estructura de ese miembro para ser mutable, y luego usar el mutador que será hecho.

(define-struct frame (a b ... c [variables #:mutable] e ...))

A continuación, puede utilizar

(set-frame-variables! res (list "new" "value"))

Esto mutar su estructura según se desee.

La Conferencia:

Me pregunto si usted está eligiendo un buen diseño para su programa. Mutando y añadiendo a una lista son dos operaciones que me hacen cuestionar un diseño en el esquema.

Además, parece que lo que está haciendo es tratar de mantener una lista de asociación de variables, con base en lo que les ha llamado. Esto no es muy eficiente, y tal vez usted debería considerar otra cosa, como un Tabla Hash

La documentación pertinente:

http://docs.plt-scheme.org/reference/define-struct.html# (form._ ((lib._scheme / base..ss) ._define-struct))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top