packages.scm 23 KB

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