Domanda

cosa c'è di sbagliato in questo codice in Dr.Scheme utilizzando abbastanza grande? Mi sembra di ricordare di fare cose simili in passato senza alcun problema.

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

che restituisce il seguente errore:

  

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

se omettere la parte (set! (Frame-variables res) ... ) funziona bene, tranne, naturalmente, che la mia lista in realtà non cambia. in modo che riconosca il secondo (Frame-varialbes res), ma non il primo? o che cosa è il problema con set! in quel contesto?

speriamo che riconoscere che ho una struct chiamato Frame con un campo variables che è una lista.

È stato utile?

Soluzione

Il problema:

Come impostare! lavori. Ciò che in realtà non fa altro che associare un nome a un oggetto che è appeso in giro da qualche parte nella memoria. Quando si imposta !, cambia ciò che nome si riferisce.

Questo è l'errore: (Frame-variables res) non è un identificatore, quindi non può fare che si riferiscono a qualcosa di diverso

.

La correzione:

Quello che stai cercando di fare è mutare un membro di una struct. Quello che dovete fare è cambiare che membro della struttura di essere mutevole, e quindi utilizzare il modificatore che verrà effettuato.

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

Quindi, è possibile utilizzare

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

In questo modo mutare la struttura, se lo desideri.

La Lecture:

Mi chiedo se si sceglie un buon design per il vostro programma. Mutando e aggiungendo ad una lista sono entrambe le operazioni che mi fanno in discussione un disegno nello Schema.

Inoltre, sembra che quello che stai facendo sta cercando di mantenere un elenco associazione di variabili, in base a ciò che li hai chiamato. Questo non è davvero efficace, e forse si dovrebbe prendere in considerazione qualcosa di diverso come un href="http://docs.plt-scheme.org/reference/hashtables.html" rel="nofollow noreferrer"> Hash Table

documentazione pertinente:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top