Переопределение синтаксических ключевых слов в r6rs

StackOverflow https://stackoverflow.com/questions/3301822

  •  26-09-2020
  •  | 
  •  

Вопрос

Как я могу создать библиотеку под названием rnrs-modified, которая будет отображать следующий код «Hello, world!»...?

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

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

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

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

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

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

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

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

Есть идеи?


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

Это было полезно?

Решение

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!.Вы читаете больше о здесь;по иронии судьбы я тоже хотел создать библиотеку без набора!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top