2012-05-17 13 views
11

Tengo un montón de código Guile Scheme "heredado" que quiero ejecutar en el Racket Scheme IDE. Parece haber suficientes diferencias para hacer de esto un ejercicio no trivial. (Mi nivel de conocimiento de Scheme es el nivel para completar The Little Schemer).Diferencias entre el Esquema Guile y el Esquema Estándar (en Racket IDE)?

Mi pregunta es:

  1. ¿Cuáles son las diferencias entre Guile Scheme y Esquema estándar (en el IDE de la raqueta)?
  2. A la vista de estas diferencias, en general, ¿cuáles son los pasos que debo seguir para convertir algún código de esquema de Guile al esquema estándar?

adicional: (feliz con divergencia entre la raqueta y Esquema R5RS/R6RS) - lo que quiero es conseguir 'algo' para funcionar en el IDE de la raqueta - en lugar de la lengua de la raqueta.

+1

Si ha atascado en estrecha colaboración con el R5RS y Estándares R6RS, entonces los lenguajes de compatibilidad que están incorporados en Racket pueden ayudar. Consulte: http://docs.racket-lang.org/guide/standards.html – dyoo

+1

¿Podría especificar qué idioma declara en DrRacket (R5RS/racket/etc)? ¿Podría dar ejemplos de dónde se está rompiendo el código? – oobivat

+0

@oobivat He barrido deliberadamente la red: la pregunta detrás de mi pregunta es "¿cuál es el material no estándar en el esquema de engaño"? Si hace que la pregunta sea más fácil de responder, entonces lo expresaría como "¿Qué es lo que probablemente romperá con mi código de esquema de engaño de 1994 cuando se ejecuta en Raqueta configurada en R5RS, y cómo lo soluciono?" – hawkeye

Respuesta

5

Si por "Esquema estándar (en el IDE de la raqueta)," quiere decir el lenguaje de la raqueta, es decir, lo que se obtiene cuando se anteponga a código con #lang racket, luego la parte superior cuatro diferencias a tener en cuenta son:

  • un sistema de módulo diferente
  • un sistema macro diferente (dependiendo de la edad de su código es)
  • contra-células inmutables (a menos que se importan los mutables)
  • no pasaría de un solo brazo de la raqueta (utilizar when)

Para transferir el código de Guile a Racket, averigüe qué archivos están "en la parte inferior" de sus dependencias, es decir, busque los archivos que no dependen de otros archivos. Abra dicho archivo en Raqueta, agregue la línea #lang racket en la parte superior e intente ejecutarlo.

Lo más probable es que encuentre algunos errores de "identificador sin consolidar". Si tiene suerte, la función está presente en Racket, pero no está incluida en el lenguaje "racket". Busque el nombre en la documentación de Racket, y si lo encuentra, use (requiera ...) para importar el nombre en su programa.

A continuación, ejecute el programa de nuevo para encontrar el siguiente error.

Algunas funciones tienen nombres diferentes en Guile y Racket, así que busque el nombre en la documentación Guile y vea qué hace. A continuación, abra la documentación Racket sobre el mismo tema y vea cómo se llama en Racket.

En algunos casos, es posible que tenga que realizar cambios mayores. Si no puede encontrar alguna funcionalidad en la documentación de Racket, intente preguntar en la lista de correo. Podría ser que simplemente tiene un nombre diferente, o que alguien lo implementó y lo puso en PLaneT (por lo tanto, no aparecerá en la documentación hasta que haya instalado el paquete).


Ejemplo de importación de srfi/1 en el lenguaje R5RS.

#lang r5rs 
(#%require srfi/1) 
(xcons 1 2) 

Diferencias de código R4RS con el Esquema moderna?

Una cosa a tener en cuenta es que en R4RS la lista vacía '() contada como falsa, no se interpreta como verdadera.

Ver esta cuestión para más cosas a tener en cuenta:

Running SICP Pattern Matching Rule Based Substitution Code

Véase también esta lista de cambios de la norma R5RS: List of changes from R4RS to R5RS

+3

Sospecho que el póster podría haber estado preguntando sobre los idiomas R5RS o R6RS en DrRacket. –

+0

Gracias Sam - Estaba barriendo la red para obtener toda la información posible. Creo que estás diciendo que el comentario anterior es específico de Racket, y no se aplica al R5RS. – hawkeye

Cuestiones relacionadas