racket/collects/srfi/features.ss
Eli Barzilay 2ea73fbc6a * Helper for reproviding stuff from srfi/N/... subdirectories
* Switch srfi/1 and a few other packages (and optionals.ss) to
  scheme/base
* Make srfi/1 etc reprovide `filter' from scheme/private/list
* Organize a few modules that were unnecessarily providing a full
  language.
* srfi/45 reprovides stuff from scheme/promise (see comments in
  "srfi/45/lazy.ss")

svn: r8999
2008-03-17 10:05:50 +00:00

29 lines
958 B
Scheme

#lang scheme/base
(provide feature-present? feature->require-clause)
(define *feature-alist*
'())
(define (srfi-id? id)
(regexp-match? #rx"^srfi-[0-9]+$" (symbol->string id)))
(define (srfi-id->filename srfi-id)
(regexp-replace #rx"^srfi-([0-9]+)$" (symbol->string srfi-id) "\\1/\\1.ss"))
(define (srfi-id-present? srfi-id)
(file-exists? (build-path (collection-path "srfi")
(srfi-id->filename srfi-id))))
(define (feature-present? id)
(or (and (srfi-id? id) (srfi-id-present? id))
(and (assq id *feature-alist*) #t)))
(define (feature->require-clause id)
(cond [(and (srfi-id? id) (srfi-id-present? id))
(string->symbol (regexp-replace #rx"^srfi-([0-9]+)$"
(symbol->string id)
"srfi/\\1/\\1"))]
[(assq id *feature-alist*) => cdr]
[else (error 'feature->require-clause "unknown feature: ~e" id)]))