2010-02-20 16 views
2

J'écris une application (A juggling pattern animator) dans PLT Scheme qui accepte les expressions Scheme comme valeurs pour certains champs. J'essaie d'écrire un petit éditeur de texte qui va me laisser "exploser" des expressions dans des expressions qui peuvent encore être évaluées mais qui contiennent les données comme des littéraux pour le peaufinage manuel.Structures de données de schéma d'écriture pour qu'elles puissent être réévaluées ou alternatives

Par exemple,

(4hss->sexp "747") 

est un appel de fonction qui génère un motif légitime. Si j'Eval et impression qui, il devient

(((7 3) - - -) (- - (4 2) -) (- (7 2) - -) (- - - (7 1)) ((4 0) - - -) (- - (7 0) -) (- (7 2) - -) (- - - (4 3)) ((7 3) - - -) (- - (7 0) -) (- (4 1) - -) (- - - (7 1))) 

qui peut être « lu » comme une chaîne, mais ne sera pas « eval » la même chose que la fonction. Pour cette déclaration, bien sûr, ce dont j'ai besoin serait aussi simple que

(quote (((7 3... 

mais d'autres exemples sont non triviaux. Celui-ci, par exemple, contient struct qui impriment en tant que vecteurs:

pair-of-jugglers 
; --> 
(#(struct:hand #(struct:position -0.35 2.0 1.0) #(struct:position -0.6 2.05 1.1) 1.832595714594046) #(struct:hand #(struct:position 0.35 2.0 1.0) #(struct:position 0.6 2.0500000000000003 1.1) 1.308996938995747) #(struct:hand #(struct:position 0.35 -2.0 1.0) #(struct:position 0.6 -2.05 1.1) -1.3089969389957472) #(struct:hand #(struct:position -0.35 -2.0 1.0) #(struct:position -0.6 -2.05 1.1) -1.8325957145940461)) 

J'ai pensé d'au moins trois solutions possibles, dont aucun ne me plaît beaucoup.

Aidez-moi avant que je commence à avoir de mauvais rêves de récursivité à nouveau.

Répondre

3

Je ne suis pas sûr de ce que vous essayez de faire. Plus précisément, essayer de produire un fichier avec eval code -able semble être un choix étrange. Dans tous les cas, la création d'une sérialisation de valeurs aléatoires est un problème lorsque vous traitez des structures - car il pourrait y avoir différentes structures avec le même nom. Quelques points qui pourraient être pertinents pour vous:

  • Il y a une bibliothèque non documentée scheme/fasl qui peut lire et écrire des valeurs en format binaire (utile pour les grandes quantités de données).

  • Il existe également mzlib/pconvert - une bibliothèque que DrScheme utilise pour imprimer des valeurs en tant qu'expressions pouvant être évaluées (mais cela ne fonctionnera pas sur tous les types de données).

  • Si vous souhaitez utiliser des structures qui sont très faciles à écrire sous une forme lisible, vous pouvez utiliser des structures préfabriquées.

(Pour plus de détails, il est probablement préférable de demander sur la liste de diffusion.)

+0

Eh bien, il est difficile de dire sans plus de détails, mais je pense que l'option maison préfabriquée peut fonctionner assez bien. (J'ai essayé votre truc - les graphismes sont impressionnants, mais je n'ai pas compris l'interface, je ne suis pas un jongleur quand même ...) –

+0

Merci de votre visite! L'interface n'est vraiment pas très bonne pour le moment. Je suis toujours en train d'y penser. –

+0

Si vous êtes toujours curieux de savoir ce qu'il peut faire, j'ai finalement laissé quelques instructions et exemples sur la page Wiki sur github. –