Pergunta

Como posso criar uma biblioteca chamada rnrs-modified que fará com que o seguinte código exiba "Hello, world!"...?

#!r6rs
(import (rnrs-modified))
(display set!)

ou mesmo isso seria bom (sem dúvida melhor, na verdade):

#!r6rs
(import (rnrs) (modified)) ;or (import (modified) (rnrs))
(display set!)

Essencialmente, quero poder redefinir palavras-chave sintáticas (let, lambda, set!, etc.) em uma biblioteca e, em seguida, importar essa biblioteca para outra biblioteca ou programa de nível superior e usar essas palavras-chave redefinidas.

No entanto, continuo recebendo isso:

module: identifier already imported from a different source in:
  set!
  (lib "rnrs/main.ss")
  (lib "rnrs-modified/main.ss")

O código que estou usando para rnrs modificado é:

#!r6rs
(library (rnrs-modified)
         (export (rename (f set!)))
         (import (rnrs))
         (define f "Hello, world!"))

Alguma ideia?


Atualizar:eu encontrei esse para 'módulos mzscheme'.Não é para o esquema r6rs, mas a funcionalidade que ele oferece é basicamente exatamente o que procuro.Como eu posso fazer provide all-from-except no esquema r6rs?

Foi útil?

Solução

O R6RS se presta mais para atingir seu objetivo, identificando a biblioteca que você deseja customizar, excluindo as peças que deseja customizar e, em seguida, definindo essas peças em sua própria biblioteca.Aqui está um exemplo:

myrnrs.sls

(library
 (myrnrs)

 (export set!)

 (import
  (except (rnrs) set!)
  (rename (rnrs) (set! rnrs-set!)))

 (define set! "Hello, world."))

teste.scm

(import
 (except (rnrs) set!)
 (myrnrs))
 (display set!)(newline)    

Infelizmente não há nada como all-from-except como temos no Racket;então você poderia criar uma biblioteca que redefine set!, mas você teria que importar rnrs e então digitar as exportações para todas essas ligações, além de redefinir set!.Você leu mais sobre aqui;ironicamente eu queria criar uma biblioteca sem set! também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top