Estoy intentando hacer ejercicio 2.78 en SICP, pero las funciones puestas y puestas son desconocidas. He probado varios idiomas, como big-big, racket, r5rs, mit-scheme, mzscheme, etc. Incluso descargué el soporte SICP (http://www.neilvandyke.org/sicp-plt/), sin éxito. ¿Cómo puedo hacer que estas funciones funcionen?Cómo obtengo las funciones puestas y me meto en SICP, Scheme, Ejercicio 2.78 y en
Respuesta
Sí, encontré el SICP un poco molesto a veces por cosas como esta. Las funciones que se supone que existen pero que en realidad no existen dificultan el intento de los ejemplos. Escribí mi propia (obtener) y (poner) de esta manera (esto fue por engaño GNU):
(define global-array '())
(define (make-entry k v) (list k v))
(define (key entry) (car entry))
(define (value entry) (cadr entry))
(define (put op type item)
(define (put-helper k array)
(cond ((null? array) (list(make-entry k item)))
((equal? (key (car array)) k) array)
(else (cons (car array) (put-helper k (cdr array))))))
(set! global-array (put-helper (list op type) global-array)))
(define (get op type)
(define (get-helper k array)
(cond ((null? array) #f)
((equal? (key (car array)) k) (value (car array)))
(else (get-helper k (cdr array)))))
(get-helper (list op type) global-array))
Probablemente una aplicación ingenua desde la perspectiva de la tarde en el libro, pero bastante simple y funcionó bien.
En la subsección Creating local tables
de 3.3.3 Representing Tables
, hay una implementación.
Existe una implementación de poner y obtener por Eli Bendersky. Estas funciones podrían implementarse usando el built-in Basic Hash Table Operations. Aquí está mi versión modificada del código de Eli para que funcione correctamente con MIT-Scheme versión 9.1.1.
(define *op-table* (make-hash-table))
(define (put op type proc)
(hash-table/put! *op-table* (list op type) proc))
(define (get op type)
(hash-table/get *op-table* (list op type) '()))
ACTUALIZADO:
he encontrado error con el código de referencia por tiempo. listas vacías se interpretan como true
en las cláusulas condicionales en el Esquema, tan correcto get
aplicación debe ser la siguiente:
(define (get op type)
(hash-table/get *op-table* (list op type) #f))
mit-esquema tiene un sistema incorporado en la tabla global que puede utilizar.
http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/The-Association-Table.html
definir simplemente llegar y poner a:
(define get 2d-get)
(define put 2d-put!)
Si utiliza lenguaje de programación de la raqueta por favor utilice los siguientes:
(define *op-table* (make-hash))
(define (put op type proc)
(hash-set! *op-table* (list op type) proc))
(define (get op type)
(hash-ref *op-table* (list op type) '()))
- 1. SICP ejercicio 1.5 y 1.6
- 2. SICP Ejercicio 1.5
- 3. Cómo usar el conjunto! en las funciones de Scheme?
- 4. Y Combinator en Scheme usando Define
- 5. Ejercicio: punteros y referencias en C++
- 6. ¿Cómo obtengo el tipo de valor en Scheme?
- 7. ¿Cuál es la explicación para el ejercicio 1.6 en el SICP?
- 8. Diferencia entre eq? y = en Scheme?
- 9. Bibliotecas para WebSockets en Lisp y Scheme?
- 10. Diferencias entre #lang scheme y #lang racket
- 11. ¿Cómo documentas las funciones y clases de PHP en línea?
- 12. * Sutil * ¿Diferencias entre las funciones VB y las funciones Convert.To *?
- 13. Además de las funciones de primera clase y el alcance léxico, ¿qué comparte JavaScript con las implementaciones de Scheme?
- 14. Examinando las partes internas de las funciones en Haskell
- 15. En jQuery cómo borrar variables y funciones
- 16. Haskell jerarquía de tipo numérico en ejercicios SICP
- 17. Archivo Uri Scheme y archivos relativos
- 18. bash: opción de depuración y las funciones
- 19. ¿Cómo funciona `let` en Scheme?
- 20. Colapsar comentarios y todas las funciones en vim/gvim
- 21. PHPMailer, AddStringAttachment y Data URI Scheme
- 22. Scheme, SICP, R5RS, ¿por qué el retraso no es una forma especial?
- 23. ¿Cómo hago exponentes en Scheme?
- 24. Scala: “ninguna” y “todas las” funciones
- 25. ¿Cómo obtengo una lista de las actualizaciones y revisiones instaladas?
- 26. Razones para utilizar las funciones estáticas y variables en C
- 27. Velocidad de las funciones cos() y sin() en sombreadores GLSL?
- 28. me gusta y no me gusta en una consulta mysql
- 29. En el ejercicio 2.26 del SICP usando DrScheme, ¿por qué se devuelve una lista en lugar de un par de listas?
- 30. SICP 1.31: Aprox. Pi
2d-get y put-2d! se quejan al proporcionar argumentos de lista para los parámetros x-key y y-key, en ese sentido es mejor usar la implementación hash-table. –