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.
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 ...) –
Merci de votre visite! L'interface n'est vraiment pas très bonne pour le moment. Je suis toujours en train d'y penser. –
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. –