Je voudrais définir une fonction to-string
qui fait le contraire de ce qui suit.Ci-contre de la chaîne de caractères read-from-string
> (read-from-string "(foo a b)")
(FOO A B) ;
Je voudrais définir une fonction to-string
qui fait le contraire de ce qui suit.Ci-contre de la chaîne de caractères read-from-string
> (read-from-string "(foo a b)")
(FOO A B) ;
Les fonctions write-to-string
and prin1-to-string
faites ce que vous voulez:
> (read-from-string "(foo \"Hi\" 17)") (FOO "Hi" 17) ; > (prin1-to-string '(FOO "Hi" 17)) "(FOO \"Hi\" 17)" > (write-to-string '(FOO "Hi" 17)) "(FOO \"Hi\" 17)"
La fonction write-to-string
prend en outre des arguments clés qui vous permettent d'ajuster le résultat:
> (write-to-string '(FOO "Hi" 17) :case :downcase) "(foo \"Hi\" 17)"
Cela semble fonctionner
(with-output-to-string (s)
(princ '(1 2 3) s))
Notez que 'princ' omet les caractères d'échappement; donc faites attention si votre objet contient des chaînes par exemple. –