R5RS da propuso definiciones de macros para la biblioteca de formularios de la sintaxis:¿Qué, si hay alguno, está mal con esta definición de letrec en Scheme?
http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.3
que también define letrec, de una manera muy complicada, ciertamente no cómo lo definiría, me basta con utilizar:
(define-syntax letrec2
(syntax-rules()
((letrec2 ((name val) ...) body bodies ...)
((lambda()
(define name val) ...
body bodies ...)))))
Por lo que entiendo la semántica de letrec, que utilizo muy a menudo como un nombre let. Funciona de esta manera, sin embargo, como he tenido una buena cantidad de debates con filósofos que piensan que pueden refutar la relatividad especial o las teorías fonológicas establecidas, sé que cuando piensas que tienes una solución simple para un problema complejo, es probable que INCORRECTO. Tiene que haber algún punto donde esta macro no satifique la semántica de letrec, de lo contrario probablemente lo habrían usado.
En esta definición, las definiciones son locales para el cuerpo del letrec, pueden referirse mutuamente para la recursión mutua, no estoy muy seguro de qué (si hay alguna) es incorrecta.
Citando conmigo: "La definición interna es una forma primitiva solo en algunas implementaciones". Citando schemewiki: "Aún así, hay algunas implementaciones de Scheme que solo proporcionan una definición primitiva de nivel superior e implementan las definiciones internas en términos de letrecs ..." Su definición solo funciona en algunas implementaciones. Cité la introducción a R5RS para mostrar por qué creo que los autores de R5RS no eligieron su implementación. Si mi punto acerca de la filosofía de R5RS no tiene sentido, estoy dispuesto a responder sus preguntas al respecto. – Davorak
@Davorak Bueno, técnicamente la definición * funcionará * en todas las implementaciones. Es solo que en algunas implementaciones el 'define' interno que usa se expandirá a la implementación nativa de' letrec'. – dubiousjim