Переопределение синтаксических ключевых слов в r6rs - PullRequest
1 голос
/ 21 июля 2010

Как я могу создать библиотеку с именем rnrs-Modified, которая выведет следующий код "Hello, world!" ...?

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

или даже это будет хорошо (возможно, лучше, на самом деле):

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

По сути, я хочу иметь возможность переопределить синтаксические ключевые слова (let, lambda, set !, и т. Д.) В библиотеке, а затем импортировать эту библиотеку в другую библиотеку или программу верхнего уровня ииспользуйте эти переопределенные ключевые слова.

Однако я продолжаю получать это:

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

Код, который я использую для rnrs-Modified:

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

Есть идеи?


Обновление: я нашел this для 'модулей mzscheme'.Это не для схемы r6rs, но функциональность, которую он предлагает, в основном именно то, что я ищу.Как мне сделать provide all-from-except в схеме r6rs?

1 Ответ

2 голосов
/ 22 июля 2010

R6RS лучше подходит для достижения вашей цели, определяя библиотеку, которую вы хотите настроить, исключая части, которые вы хотите настроить, а затем определяя эти части в своей собственной библиотеке.Вот пример:

myrnrs.sls

(library
 (myrnrs)

 (export set!)

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

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

test.scm

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

К сожалению, естьничего похожего на все, кроме того, что есть в Racket;так что вы можете создать библиотеку, которая переопределяет set !, но вам нужно будет импортировать rnrs, а затем ввести экспорт для всех этих привязок в дополнение к переопределению set !.Вы читаете больше о здесь ;по иронии судьбы я хотел создать библиотеку без набора !, тоже.

...