packages.scm 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, David van Horn,
  3. ; Martin Gasbichler, Michael Zabka, Emilio Lopes
  4. ;----------------
  5. ; SRFI packages
  6. ; SRFI-0 - Doesn't work with the module system.
  7. ; Olin's list library.
  8. (define-interface srfi-1-interface
  9. (export map for-each member assoc ; redefined from R5RS
  10. xcons make-list list-tabulate cons* list-copy
  11. proper-list? circular-list? dotted-list? not-pair? null-list? list=
  12. circular-list length+
  13. iota
  14. first second third fourth fifth sixth seventh eighth ninth tenth
  15. car+cdr
  16. take drop
  17. take-right drop-right
  18. take! drop-right!
  19. split-at split-at!
  20. last last-pair
  21. zip unzip1 unzip2 unzip3 unzip4 unzip5
  22. count
  23. append! append-reverse append-reverse! concatenate concatenate!
  24. unfold fold pair-fold reduce
  25. unfold-right fold-right pair-fold-right reduce-right
  26. append-map append-map! map! pair-for-each filter-map map-in-order
  27. filter partition remove
  28. filter! partition! remove!
  29. find find-tail any every list-index
  30. take-while drop-while take-while!
  31. span break span! break!
  32. delete delete!
  33. alist-cons alist-copy
  34. delete-duplicates delete-duplicates!
  35. alist-delete alist-delete!
  36. reverse!
  37. lset<= lset= lset-adjoin
  38. lset-union lset-intersection lset-difference lset-xor
  39. lset-diff+intersection
  40. lset-union! lset-intersection! lset-difference! lset-xor!
  41. lset-diff+intersection!))
  42. (define-structure srfi-1 srfi-1-interface
  43. (open (modify scheme-level-2 (hide map for-each member assoc)) ; redefined
  44. receiving
  45. (subset exceptions (assertion-violation)))
  46. (files srfi-1))
  47. ; AND-LET*: an AND with local bindings, a guarded LET* special form
  48. (define-structure srfi-2 (export (and-let* :syntax))
  49. (open scheme-level-2
  50. exceptions) ; error
  51. (files srfi-2))
  52. ; SRFI-3 - withdrawn
  53. ; SRFI 4: Homogeneous numeric vector datatypes
  54. ; Does not include hacks to the reader (intentionally).
  55. (define-interface srfi-4-interface
  56. (export
  57. s8vector? make-s8vector s8vector s8vector-length
  58. s8vector-ref s8vector-set! s8vector->list list->s8vector
  59. u8vector? make-u8vector u8vector u8vector-length
  60. u8vector-ref u8vector-set! u8vector->list list->u8vector
  61. s16vector? make-s16vector s16vector s16vector-length
  62. s16vector-ref s16vector-set! s16vector->list list->s16vector
  63. u16vector? make-u16vector u16vector u16vector-length
  64. u16vector-ref u16vector-set! u16vector->list list->u16vector
  65. s32vector? make-s32vector s32vector s32vector-length
  66. s32vector-ref s32vector-set! s32vector->list list->s32vector
  67. u32vector? make-u32vector u32vector u32vector-length
  68. u32vector-ref u32vector-set! u32vector->list list->u32vector
  69. s64vector? make-s64vector s64vector s64vector-length
  70. s64vector-ref s64vector-set! s64vector->list list->s64vector
  71. u64vector? make-u64vector u64vector u64vector-length u64vector-ref
  72. u64vector-set! u64vector->list list->u64vector
  73. f32vector? make-f32vector f32vector f32vector-length f32vector-ref
  74. f32vector-set! f32vector->list list->f32vector
  75. f64vector? make-f64vector f64vector f64vector-length f64vector-ref
  76. f64vector-set! f64vector->list list->f64vector
  77. ))
  78. (define-structure srfi-4 srfi-4-interface
  79. (open scheme define-record-types
  80. srfi-16 ; case-lambda
  81. srfi-60 ; Integers as Bits
  82. (modify srfi-66 ; Octet vectors
  83. (rename (make-u8vector srfi-66:make-u8vector)))
  84. srfi-74 ; blobs
  85. (subset big-util (no-op)))
  86. (files srfi-4))
  87. ; A compatible let form with signatures and rest arguments
  88. (define-structure srfi-5 (export (let :syntax))
  89. (open (modify scheme-level-2 (rename (let standard-let))))
  90. (files srfi-5))
  91. ; Basic String Ports
  92. (define-structure srfi-6 (export open-input-string
  93. open-output-string
  94. get-output-string)
  95. (open (modify extended-ports
  96. (rename (make-string-input-port open-input-string)
  97. (make-string-output-port open-output-string)
  98. (string-output-port-output get-output-string)))))
  99. ; Configuration language
  100. (define-structure srfi-7 (export program) ; also defines a command
  101. (open scheme
  102. ; for parsing programs
  103. receiving
  104. nondeterminism
  105. (subset exceptions (assertion-violation))
  106. (subset evaluation (eval-from-file))
  107. (subset package-commands-internal (config-package))
  108. ensures-loaded
  109. (subset packages (note-structure-name!))
  110. ; for defining the command
  111. (subset command-processor (define-user-command-syntax
  112. user-command-environment))
  113. (subset environments (environment-define! environment-ref))
  114. ; for opening needed packages during evaluation
  115. (subset package-mutation (package-open!))
  116. (subset packages (make-modified-structure)))
  117. (begin
  118. (define available-srfis
  119. '(srfi-1 srfi-2 srfi-4 srfi-5 srfi-6 srfi-7 srfi-8 srfi-9
  120. srfi-11 srfi-13 srfi-14 srfi-16 srfi-17 srfi-19
  121. srfi-23 srfi-25 srfi-26 srfi-27 srfi-28
  122. srfi-31 srfi-34 srfi-37
  123. srfi-39 srfi-40 srfi-42 srfi-43 srfi-45
  124. srfi-60 srfi-61 srfi-62 srfi-63 srfi-66 srfi-67
  125. srfi-71 srfi-74 srfi-78
  126. srfi-95))
  127. ; Some SRFI's redefine Scheme variables.
  128. (define shadowed
  129. '((srfi-1 map for-each member assoc)
  130. (srfi-5 let)
  131. (srfi-13 string->list string-copy string-fill!)
  132. (srfi-17 set!)
  133. (srfi-45 force delay)
  134. (srfi-43 vector-fill! vector->list list->vector)
  135. (srfi-61 cond)
  136. (srfi-63 equal?)
  137. (srfi-71 let let* letrec)))
  138. )
  139. (files srfi-7))
  140. ; receive: Binding to multiple values
  141. ; Identical to the version in UTIL
  142. (define-structure srfi-8 (export (receive :syntax))
  143. (open scheme-level-2
  144. util))
  145. ; Defining Record Types
  146. ; SRFI-9 is a slight modification of DEFINE-RECORD-TYPE.
  147. (define-structure srfi-9 (export (define-record-type :syntax))
  148. (open scheme-level-2
  149. (with-prefix define-record-types sys:))
  150. (begin
  151. (define-syntax define-record-type
  152. (syntax-rules ()
  153. ((define-record-type type-name . stuff)
  154. (sys:define-record-type type-name type-name . stuff))))))
  155. ; SRFI-10 - no stand-alone interface.
  156. ; Syntax for receiving multiple values
  157. (define-structure srfi-11 (export (let-values :syntax)
  158. (let*-values :syntax))
  159. (open scheme-level-2)
  160. (files srfi-11))
  161. ; SRFI-12 - withdrawn
  162. ; Two more encyclopedias from Olin.
  163. ; String Library
  164. (define-interface srfi-13-interface
  165. (export string-map string-map!
  166. string-fold string-unfold
  167. string-fold-right string-unfold-right
  168. string-tabulate string-for-each string-for-each-index
  169. string-every string-any
  170. string-hash string-hash-ci
  171. string-compare string-compare-ci
  172. string= string< string> string<= string>= string<>
  173. string-ci= string-ci< string-ci> string-ci<= string-ci>= string-ci<>
  174. string-downcase string-upcase string-titlecase
  175. string-downcase! string-upcase! string-titlecase!
  176. string-take string-take-right
  177. string-drop string-drop-right
  178. string-pad string-pad-right
  179. string-trim string-trim-right string-trim-both
  180. string-filter string-delete
  181. string-index string-index-right
  182. string-skip string-skip-right
  183. string-count
  184. string-prefix-length string-prefix-length-ci
  185. string-suffix-length string-suffix-length-ci
  186. string-prefix? string-prefix-ci?
  187. string-suffix? string-suffix-ci?
  188. string-contains string-contains-ci
  189. string-copy! substring/shared
  190. string-reverse string-reverse! reverse-list->string
  191. string-concatenate
  192. string-concatenate/shared
  193. string-concatenate-reverse
  194. string-concatenate-reverse/shared
  195. string-append/shared
  196. xsubstring string-xcopy!
  197. string-null?
  198. string-join
  199. string-tokenize
  200. string-replace
  201. string->list string-copy string-fill!
  202. string? make-string string-length string-ref string-set!
  203. string string-append list->string))
  204. (define-structure srfi-13 srfi-13-interface
  205. (open (modify scheme-level-2
  206. (hide string-copy string-upcase string-downcase string-titlecase string-fill! string->list))
  207. bitwise
  208. srfi-8 srfi-14
  209. (modify unicode-char-maps
  210. (hide string-upcase string-downcase string-titlecase))
  211. (subset exceptions (assertion-violation)))
  212. (files srfi-13))
  213. ; Character-Set Library
  214. (define-interface srfi-14-interface
  215. (export char-set? char-set=
  216. char-set<= char-set-hash char-set-cursor char-set-ref
  217. char-set-cursor-next end-of-char-set? char-set-fold char-set-unfold
  218. char-set-unfold! char-set-for-each char-set-map char-set-copy
  219. char-set
  220. list->char-set string->char-set
  221. list->char-set! string->char-set!
  222. char-set-filter ucs-range->char-set
  223. ; the SRFI defines ->CHAR-SET, but that isn't a legal identifier
  224. x->char-set
  225. char-set-filter! ucs-range->char-set!
  226. char-set->list char-set->string
  227. char-set-size char-set-count char-set-contains?
  228. char-set-every char-set-any
  229. char-set-adjoin char-set-delete
  230. char-set-adjoin! char-set-delete!
  231. char-set-complement char-set-union char-set-intersection
  232. char-set-complement! char-set-union! char-set-intersection!
  233. char-set-difference char-set-xor char-set-diff+intersection
  234. char-set-difference! char-set-xor! char-set-diff+intersection!
  235. char-set:lower-case char-set:upper-case char-set:title-case
  236. char-set:letter char-set:digit char-set:letter+digit
  237. char-set:graphic char-set:printing char-set:whitespace
  238. char-set:iso-control char-set:punctuation char-set:symbol
  239. char-set:hex-digit char-set:blank char-set:ascii
  240. char-set:empty char-set:full
  241. ))
  242. (define-structure srfi-14 srfi-14-interface
  243. (open scheme-level-2
  244. bitwise
  245. unicode
  246. byte-vectors
  247. (subset primitives (copy-bytes! unspecific))
  248. inversion-lists
  249. srfi-9
  250. (subset define-record-types (define-record-discloser))
  251. variable-argument-lists
  252. (subset big-util (partition-list))
  253. (subset features (make-immutable!))
  254. (subset exceptions (assertion-violation)))
  255. (optimize auto-integrate)
  256. (files srfi-14
  257. srfi-14-base-char-sets ; auto-generated
  258. srfi-14-char-sets))
  259. ; SRFI-15 - withdrawn
  260. ; Syntax for procedures of variable arity
  261. (define-structure srfi-16 (export (case-lambda :syntax))
  262. (open scheme-level-2
  263. (subset exceptions (assertion-violation)))
  264. (files srfi-16))
  265. ; Generalized set!
  266. (define-structure srfi-17 (export (set! :syntax) setter)
  267. (open (modify scheme-level-2 (rename (set! scheme-set!)))
  268. (subset exceptions (assertion-violation))
  269. (subset util (unspecific)))
  270. (files srfi-17))
  271. ; SRFI-18 - no implementation given
  272. (define-interface srfi-19-interface
  273. (export
  274. ;; Constants
  275. time-duration
  276. time-monotonic
  277. time-process
  278. time-tai
  279. time-thread
  280. time-utc
  281. ;; Current time and clock resolution
  282. current-date
  283. current-julian-day
  284. current-modified-julian-day
  285. current-time
  286. time-resolution
  287. ;; Time object and accessors
  288. make-time
  289. time?
  290. time-type
  291. time-nanosecond
  292. time-second
  293. set-time-type!
  294. set-time-nanosecond!
  295. set-time-second!
  296. copy-time
  297. ;; Time comparison procedures
  298. time<=?
  299. time<?
  300. time=?
  301. time>=?
  302. time>?
  303. ;; Time arithmetic procedures
  304. time-difference
  305. time-difference!
  306. add-duration
  307. add-duration!
  308. subtract-duration
  309. subtract-duration!
  310. ;; Date object and accessors
  311. make-date
  312. date?
  313. date-nanosecond
  314. date-second
  315. date-minute
  316. date-hour
  317. date-day
  318. date-month
  319. date-year
  320. date-zone-offset
  321. date-year-day
  322. date-week-day
  323. date-week-number
  324. ;; Time/Date/Julian Day/Modified Julian Day converters
  325. date->julian-day
  326. date->modified-julian-day
  327. date->time-monotonic
  328. date->time-tai
  329. date->time-utc
  330. julian-day->date
  331. julian-day->time-monotonic
  332. julian-day->time-tai
  333. julian-day->time-utc
  334. modified-julian-day->date
  335. modified-julian-day->time-monotonic
  336. modified-julian-day->time-tai
  337. modified-julian-day->time-utc
  338. time-monotonic->date
  339. time-monotonic->time-tai
  340. time-monotonic->time-tai!
  341. time-monotonic->time-utc
  342. time-monotonic->time-utc!
  343. time-tai->date
  344. time-tai->julian-day
  345. time-tai->modified-julian-day
  346. time-tai->time-monotonic
  347. time-tai->time-monotonic!
  348. time-tai->time-utc
  349. time-tai->time-utc!
  350. time-utc->date
  351. time-utc->julian-day
  352. time-utc->modified-julian-day
  353. time-utc->time-monotonic
  354. time-utc->time-monotonic!
  355. time-utc->time-tai
  356. time-utc->time-tai!
  357. ;; Date to string/string to date converters.
  358. date->string
  359. string->date))
  360. (define-structure srfi-19 srfi-19-interface
  361. (open scheme
  362. srfi-9 ; DEFINE-RECORD-PROCEDURES
  363. srfi-23 ; ERROR
  364. ascii
  365. receiving
  366. (modify os-time (prefix os-time:))
  367. (modify extended-ports
  368. (rename (make-string-output-port open-output-string)
  369. (string-output-port-output get-output-string)
  370. (make-string-input-port open-input-string))))
  371. (files srfi-19))
  372. ; SRFI-20 - withdrawn
  373. ; SRFI-21 - no implementation given
  374. ; SRFI-22 - needs internals hacking
  375. ; Error reporting mechanism
  376. (define-structure srfi-23 (export error)
  377. (open scheme
  378. (modify exceptions
  379. (rename (error exceptions:error))))
  380. (begin
  381. (define (error message . irritants)
  382. (apply exceptions:error #f message irritants))))
  383. ; Multi-dimensional Array Primitives
  384. (define-interface srfi-25-interface
  385. (export array? make-array shape array array-rank
  386. array-start array-end array-ref array-set! share-array))
  387. (define-structure srfi-25 srfi-25-interface
  388. (open scheme
  389. define-record-types
  390. (subset exceptions (assertion-violation)))
  391. (files srfi-25))
  392. ; Notation for Specializing Parameters without Currying
  393. (define-interface srfi-26-interface
  394. (export ((cut cute) :syntax)))
  395. (define-structure srfi-26 srfi-26-interface
  396. (open scheme)
  397. (files srfi-26))
  398. ; Sources of Random Bits
  399. (define-interface srfi-27-interface
  400. (export random-integer
  401. random-real
  402. default-random-source
  403. make-random-source
  404. random-source?
  405. random-source-state-ref
  406. random-source-state-set!
  407. random-source-randomize!
  408. random-source-pseudo-randomize!
  409. random-source-make-integers
  410. random-source-make-reals))
  411. (define-structure srfi-27 srfi-27-interface
  412. (open
  413. scheme-level-1
  414. floatnums
  415. external-calls load-dynamic-externals
  416. (subset srfi-9 (define-record-type))
  417. (subset srfi-23 (error)))
  418. (files srfi-27))
  419. ; Basic Format Strings
  420. (define-interface srfi-28-interface
  421. (export format))
  422. (define-structure srfi-28 srfi-28-interface
  423. (open scheme
  424. (subset exceptions (assertion-violation))
  425. srfi-6 ; string ports
  426. )
  427. (files srfi-28))
  428. ; A special form for recursive evaluation
  429. (define-interface srfi-31-interface
  430. (export (rec :syntax)))
  431. (define-structure srfi-31 srfi-31-interface
  432. (open scheme)
  433. (begin
  434. ; Taken directly from the SRFI document.
  435. (define-syntax rec
  436. (syntax-rules ()
  437. ((rec (NAME . VARIABLES) . BODY)
  438. (letrec ( (NAME (lambda VARIABLES . BODY)) ) NAME))
  439. ((rec NAME EXPRESSION)
  440. (letrec ( (NAME EXPRESSION) ) NAME))))))
  441. ; Exception Handling for Programs
  442. (define-interface srfi-34-interface
  443. (export with-exception-handler
  444. raise
  445. (guard :syntax)))
  446. (define-structure srfi-34 srfi-34-interface
  447. (open scheme
  448. exceptions))
  449. ; SRFI 37: args-fold: a program argument processor
  450. (define-interface srfi-37-interface
  451. (export args-fold
  452. option-processor
  453. option option-names option-required-arg? option-optional-arg?))
  454. (define-structure srfi-37 srfi-37-interface
  455. (open scheme
  456. define-record-types
  457. srfi-11)
  458. (files srfi-37))
  459. ; SRFI 39: Parameter objects
  460. (define-interface srfi-39-interface
  461. (export make-parameter
  462. ((parameterize) :syntax)))
  463. (define-structure srfi-39 srfi-39-interface
  464. (open scheme
  465. exceptions
  466. fluids
  467. cells)
  468. (files srfi-39))
  469. ; SRFI 40: A Library of Streams
  470. (define-interface srfi-40-interface
  471. (export stream-null (stream-cons :syntax) stream? stream-null? stream-pair?
  472. stream-car stream-cdr (stream-delay :syntax) stream stream-unfoldn
  473. stream-map stream-for-each stream-filter))
  474. (define-structure srfi-40 srfi-40-interface
  475. (open (modify scheme (hide delay force))
  476. define-record-types
  477. cells
  478. (subset srfi-1 (any every))
  479. srfi-23 ; ERROR
  480. )
  481. (files srfi-40))
  482. ; SRFI 42: Eager Comprehensions
  483. (define-interface srfi-42-interface
  484. (export ((do-ec
  485. list-ec append-ec
  486. string-ec string-append-ec
  487. vector-ec vector-of-length-ec
  488. sum-ec product-ec
  489. min-ec max-ec
  490. any?-ec every?-ec
  491. first-ec last-ec
  492. fold-ec fold3-ec) :syntax)
  493. ((:
  494. :list :string :vector
  495. :integers
  496. :range :real-range :char-range
  497. :port
  498. :dispatched) :syntax)
  499. ((:do :let :parallel :while :until) :syntax)
  500. :-dispatch-ref :-dispatch-set! make-initial-:-dispatch
  501. (:generator-proc :syntax)))
  502. (define-structure srfi-42 srfi-42-interface
  503. (open scheme
  504. srfi-23)
  505. (files srfi-42))
  506. ; SRFI 43: Vector library
  507. (define-interface srfi-43-interface
  508. (export make-vector vector vector-unfold vector-unfold-right
  509. vector-copy vector-reverse-copy vector-append vector-concatenate
  510. vector? vector-empty? vector= vector-ref vector-length
  511. vector-fold vector-fold-right vector-map vector-map!
  512. vector-for-each vector-count vector-index vector-skip
  513. vector-index-right vector-skip-right
  514. vector-binary-search vector-any vector-every
  515. vector-set! vector-swap! vector-fill! vector-reverse!
  516. vector-copy! vector-reverse-copy! vector-reverse!
  517. vector->list reverse-vector->list list->vector reverse-list->vector))
  518. (define-structure srfi-43 srfi-43-interface
  519. (open (modify scheme
  520. (rename (vector-fill! %vector-fill!))
  521. (rename (vector->list %vector->list))
  522. (rename (list->vector %list->vector)))
  523. (modify util (rename (unspecific unspecified-value)))
  524. (subset srfi-8 (receive))
  525. (subset exceptions (assertion-violation)))
  526. (files srfi-43))
  527. ; SRFI 45: Primitives for Expressing Iterative Lazy Algorithms
  528. (define-interface srfi-45-interface
  529. (export (lazy :syntax) force (delay :syntax)))
  530. (define-structure srfi-45 srfi-45-interface
  531. (open (modify scheme (hide delay force))
  532. define-record-types)
  533. (files srfi-45))
  534. ; SRFI 60: Integers as Bits
  535. (define-interface srfi-60-interface
  536. (export logand bitwise-and logior bitwise-ior logxor bitwise-xor
  537. lognot bitwise-not bitwise-if bitwise-merge logtest
  538. any-bits-set? logcount bit-count integer-length
  539. log2-binary-factors first-set-bit logbit? bit-set?
  540. copy-bit bit-field copy-bit-field ash arithmetic-shift
  541. rotate-bit-field reverse-bit-field integer->list
  542. list->integer booleans->integer))
  543. (define-structure srfi-60 srfi-60-interface
  544. (open scheme bitwise)
  545. (files srfi-60))
  546. ; SRFI 61: A more general cond clause
  547. (define-interface srfi-61-interface
  548. (export (cond :syntax)))
  549. (define-structure srfi-61 srfi-61-interface
  550. (open (modify scheme (hide cond)))
  551. (files srfi-61))
  552. ; SRFI 62: S-expression comments
  553. ; note this modifies the reader
  554. (define-structure srfi-62 (export)
  555. (open scheme
  556. reading)
  557. (begin
  558. (define-sharp-macro #\;
  559. (lambda (char port)
  560. ;; The octothorpe reader leaves the semicolon
  561. ;; in the input stream, so we consume it.
  562. (read-char port)
  563. (sub-read-carefully port)
  564. (sub-read port)))))
  565. ; SRFI 63: Homogeneous and Heterogeneous Arrays
  566. (define-interface srfi-63-interface
  567. (export array? equal? array-rank array-dimensions make-array
  568. make-shared-array list->array array->list vector->array
  569. array->vector array-in-bounds? array-ref array-set!
  570. a:fixz8b a:fixz16b a:fixz32b a:fixz64b
  571. a:fixn8b a:fixn16b a:fixn32b a:fixn64b
  572. a:floc16b a:floc32b a:floc64b a:floc128b
  573. a:flor16b a:flor32b a:flor64b a:flor128b
  574. a:floq32d a:floq64d a:floq128d
  575. a:bool))
  576. (define-structure srfi-63 srfi-63-interface
  577. (open (modify scheme-level-2 (hide equal?)) ; redefined
  578. define-record-types
  579. srfi-4 srfi-16
  580. (subset exceptions (assertion-violation)))
  581. (files srfi-63))
  582. ; SRFI 66: Octet Vectors
  583. (define-interface srfi-66-interface
  584. (export make-u8vector
  585. u8vector?
  586. list->u8vector u8vector->list
  587. u8vector
  588. u8vector-length
  589. u8vector-ref u8vector-set!
  590. u8vector-copy! u8vector-copy
  591. u8vector=?
  592. u8vector-compare))
  593. (define-structure srfi-66 srfi-66-interface
  594. (open scheme
  595. byte-vectors
  596. (subset primitives (copy-bytes!)))
  597. (files srfi-66))
  598. ; SRFI 67: Compare Procedures
  599. (define-interface srfi-67-interface
  600. (export boolean-compare
  601. char-compare char-compare-ci
  602. string-compare string-compare-ci
  603. symbol-compare
  604. integer-compare rational-compare real-compare complex-compare
  605. number-compare
  606. vector-compare vector-compare-as-list
  607. list-compare list-compare-as-vector
  608. pair-compare-car pair-compare-cdr
  609. pair-compare
  610. default-compare
  611. (refine-compare :syntax)
  612. (select-compare :syntax)
  613. (cond-compare :syntax)
  614. (if3 :syntax)
  615. ((if=? if<? if>? if<=? if>=? if-not=?) :syntax)
  616. =? <? >? <=? >=? not=?
  617. </<? </<=? <=/<? <=/<=? >/>? >/>=? >=/>? >=/>=?
  618. chain=? chain<? chain>? chain<=? chain>=?
  619. pairwise-not=?
  620. min-compare max-compare
  621. kth-largest
  622. compare-by< compare-by> compare-by<= compare-by>= compare-by=/< compare-by=/>
  623. debug-compare))
  624. (define-structure srfi-67 srfi-67-interface
  625. (open scheme
  626. srfi-16 ; CASE-LAMBDA
  627. srfi-23 ; ERROR
  628. srfi-27 ; RANDOM
  629. )
  630. (files srfi-67))
  631. ; SRFI 71: Extended LET-syntax for multiple values
  632. (define-interface srfi-71-interface
  633. (export ((let let* letrec) :syntax)
  634. ((values->list values->vector) :syntax)
  635. uncons
  636. uncons-2
  637. uncons-3
  638. uncons-4
  639. uncons-cons
  640. unlist
  641. unvector))
  642. (define-structure srfi-71*
  643. (export ((srfi-let srfi-let* srfi-letrec) :syntax)
  644. ((values->list values->vector) :syntax)
  645. uncons
  646. uncons-2
  647. uncons-3
  648. uncons-4
  649. uncons-cons
  650. unlist
  651. unvector)
  652. (open (modify scheme
  653. (rename (let r5rs-let)
  654. (let* r5rs-let*)
  655. (letrec r5rs-letrec))))
  656. (files srfi-71))
  657. (define-structure srfi-71 srfi-71-interface
  658. (open (modify srfi-71*
  659. (rename (srfi-let let)
  660. (srfi-let* let*)
  661. (srfi-letrec letrec)))))
  662. ; SRFI 74: Octet-addressed binary objects
  663. (define-interface srfi-74-interface
  664. (export (endianness :syntax)
  665. blob? make-blob
  666. blob-length
  667. blob-u8-ref blob-u8-set!
  668. blob-s8-ref blob-s8-set!
  669. blob-uint-ref blob-uint-set!
  670. blob-sint-ref blob-sint-set!
  671. blob-u16-ref blob-s16-ref
  672. blob-u16-native-ref blob-s16-native-ref
  673. blob-u16-set! blob-s16-set!
  674. blob-u16-native-set! blob-s16-native-set!
  675. blob-u32-ref blob-s32-ref
  676. blob-u32-native-ref blob-s32-native-ref
  677. blob-u32-set! blob-s32-set!
  678. blob-u32-native-set! blob-s32-native-set!
  679. blob-u64-ref blob-s64-ref
  680. blob-u64-native-ref blob-s64-native-ref
  681. blob-u64-set! blob-s64-set!
  682. blob-u64-native-set! blob-s64-native-set!
  683. blob=?
  684. blob-copy blob-copy!
  685. blob->u8-list u8-list->blob
  686. blob->uint-list blob->sint-list
  687. uint-list->blob sint-list->blob))
  688. (define-structure srfi-74 srfi-74-interface
  689. (open scheme
  690. srfi-23 ; ERROR
  691. srfi-26 ; CUT
  692. bitwise
  693. srfi-66 ; U8VECTOR
  694. )
  695. (files srfi-74))
  696. ; SRFI 78: Lightweight testing
  697. (define-interface srfi-78-interface
  698. (export (check :syntax)
  699. (check-ec :syntax)
  700. check-report
  701. check-set-mode!
  702. check-reset!
  703. check-passed?))
  704. (define-structure srfi-78 srfi-78-interface
  705. (open scheme srfi-42
  706. (subset exceptions (assertion-violation)))
  707. (files srfi-78))
  708. ; SRFI 95: Sorting and Merging
  709. (define-interface srfi-95-interface
  710. (export sorted? merge merge! sort sort!))
  711. (define-structure srfi-95 srfi-95-interface
  712. (open (modify scheme (hide equal?)) srfi-63
  713. (modify sorting (prefix olin:))
  714. (modify list-merge-sort (prefix olin:))
  715. (modify vector-merge-sort (prefix olin:)))
  716. (files srfi-95))