manejo listas ejemplos ejemplo codigo lisp scheme

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 .