lisp - listas - let scheme
Convierte cadena en código en Scheme (4)
A partir de esta pregunta similar en comp.lang.scheme puede guardar la cadena en un archivo y luego leer desde allí.
Eso podría ser algo así como este código de ejemplo:
(let ((my-port (open-output-file "Foo")))
(display "(1 (0) 1 (0) 0)" my-port)
(close-output-port my-port))
(let* ((my-port (open-input-file "Foo"))
(answer (read my-port)))
(close-input-port my-port)
answer)
¿Cómo convierto una cadena en el código correspondiente en PLT Scheme (que no contiene el método string->input-port
)? Por ejemplo, quiero convertir esta cadena:
"(1 (0) 1 (0) 0)"
en esta lista:
''(1 (0) 1 (0) 0)
¿Es posible hacer esto sin abrir un archivo?
Scheme tiene un procedimiento de read
para leer s-expressions desde el puerto de entrada y puede convertir una cadena en una secuencia de entrada con string->input-port
. Entonces, puedes leer un objeto Scheme de una cadena con
(read (string->input-port "(1 (0) 1 (0) 0)"))
No tengo instalado Scheme, por lo que solo lo leí de referencia y no lo probé.
Muchos esquemas tienen with-input-from-string str thunk
que ejecuta thunk
en un contexto donde str
es el puerto de entrada estándar. Por ejemplo en el esquema de gambito:
(with-input-from-string "(foo bar)" (lambda () (read)))
evalúa a:
(foo bar)
La lambda es necesaria porque un thunk
debería ser un procedimiento sin argumentos.
Del manual PLT Scheme:
(open-input-string string [name-v])
crea un puerto de entrada que lee bytes de la codificación UTF-8 (consulte la sección 1.2.3) de la cadena. El argumento opcional name-v
se usa como el nombre del puerto devuelto; el valor predeterminado es ''string
.