interfaces.scm 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. ;;; Interface defs for the Scheme Underground sorting package,
  2. ;;; in the Scheme 48 module language.
  3. ;;; This code is
  4. ;;; Copyright (c) 1998 by Olin Shivers.
  5. ;;; The terms are: You may do as you please with this code, as long as
  6. ;;; you do not delete this notice or hold me responsible for any outcome
  7. ;;; related to its use.
  8. ;;;
  9. ;;; Blah blah blah. Don't you think source files should contain more lines
  10. ;;; of code than copyright notice?
  11. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  12. ;;; list-delete-neighbor-dups = l -> list
  13. ;;; vector-delete-neighbor-dups = v [start end] -> vector
  14. ;;; vector-delete-neighbor-dups! = v [start end] -> vector
  15. ;;;
  16. (define-interface delete-neighbor-duplicates-interface
  17. (export (list-delete-neighbor-dups
  18. (proc ((proc (:value :value) :boolean)
  19. :value)
  20. :value))
  21. (vector-delete-neighbor-dups
  22. (proc ((proc (:value :value) :boolean)
  23. :vector
  24. &opt
  25. :exact-integer :exact-integer)
  26. :vector))
  27. (vector-delete-neighbor-dups!
  28. (proc ((proc (:value :value) :boolean)
  29. :vector
  30. &opt
  31. :exact-integer :exact-integer)
  32. :vector))))
  33. ;;; vector-binary-search elt< elt->key key v [start end] -> integer-or-false
  34. ;;; vector-binary-search3 c v [start end] -> integer-or-false
  35. (define-interface binary-searches-interface
  36. (export vector-binary-search
  37. vector-binary-search3))
  38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  39. ;;; list-sorted? < l -> boolean
  40. ;;; vector-sorted? < v [start end] -> boolean
  41. (define-interface sorted-interface
  42. (export (list-sorted? (proc ((proc (:value :value) :boolean) :value) :boolean))
  43. (vector-sorted? (proc ((proc (:value :value) :boolean)
  44. :vector
  45. &opt :exact-integer :exact-integer)
  46. :boolean))))
  47. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48. ;;; list-merge-sort < l -> list
  49. ;;; list-merge-sort! < l -> list
  50. ;;; list-merge < lis lis -> list
  51. ;;; list-merge! < lis lis -> list
  52. (define-interface list-merge-sort-interface
  53. (export ((list-merge-sort list-merge-sort!)
  54. (proc ((proc (:value :value) :boolean) :value) :value))
  55. ((list-merge list-merge!)
  56. (proc ((proc (:value :value) :boolean) :value :value) :value))))
  57. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  58. ;;; vector-merge-sort < v [start end temp] -> vector
  59. ;;; vector-merge-sort! < v [start end temp] -> unspecific
  60. ;;; vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
  61. ;;; vector-merge! < v v1 v2 [start0 start1 end1 start2 end2] -> unspecific
  62. (define-interface vector-merge-sort-interface
  63. (export
  64. (vector-merge-sort (proc ((proc (:value :value) :boolean)
  65. :vector
  66. &opt
  67. :exact-integer :exact-integer
  68. :vector)
  69. :vector))
  70. (vector-merge-sort! (proc ((proc (:value :value) :boolean)
  71. :vector
  72. &opt
  73. :exact-integer :exact-integer
  74. :vector)
  75. :unspecific))
  76. (vector-merge (proc ((proc (:value :value) :boolean)
  77. :vector :vector
  78. &opt
  79. :exact-integer :exact-integer
  80. :exact-integer :exact-integer)
  81. :vector))
  82. (vector-merge! (proc ((proc (:value :value) :boolean)
  83. :vector :vector :vector
  84. &opt
  85. :exact-integer :exact-integer :exact-integer
  86. :exact-integer :exact-integer)
  87. :unspecific))))
  88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89. ;;; vector-heap-sort < v [start end] -> vector
  90. ;;; vector-heap-sort! < v -> unspecific
  91. (define-interface vector-heap-sort-interface
  92. (export (vector-heap-sort (proc ((proc (:value :value) :boolean)
  93. :vector
  94. &opt :exact-integer :exact-integer)
  95. :vector))
  96. (vector-heap-sort! (proc ((proc (:value :value) :boolean) :vector) :unspecific))))
  97. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  98. ;;; vector-insert-sort < v [start end] -> vector
  99. ;;; vector-insert-sort! < v [start end] -> unspecific
  100. ;;;
  101. ;;; internal:
  102. ;;; %vector-insert-sort! < v start end -> unspecific
  103. (define-interface vector-insertion-sort-interface
  104. (export (vector-insert-sort (proc ((proc (:value :value) :boolean)
  105. :vector
  106. &opt :exact-integer :exact-integer)
  107. :vector))
  108. (vector-insert-sort! (proc ((proc (:value :value) :boolean)
  109. :vector
  110. &opt :exact-integer :exact-integer)
  111. :unspecific))))
  112. (define-interface vector-insertion-sort-internal-interface
  113. (export (%vector-insert-sort! (proc ((proc (:value :value) :boolean)
  114. :vector
  115. :exact-integer :exact-integer)
  116. :unspecific))))
  117. (define-interface vector-quick-sort-interface
  118. (export (vector-quick-sort (proc ((proc (:value :value) :boolean)
  119. :vector
  120. &opt :exact-integer :exact-integer)
  121. :vector))
  122. (vector-quick-sort! (proc ((proc (:value :value) :boolean)
  123. :vector
  124. &opt :exact-integer :exact-integer)
  125. :unspecific))))
  126. (define-interface vector-quick-sort3-interface
  127. (export (vector-quick-sort3 (proc ((proc (:value :value) :exact-integer)
  128. :vector
  129. &opt :exact-integer :exact-integer)
  130. :vector))
  131. (vector-quick-sort3! (proc ((proc (:value :value) :exact-integer)
  132. :vector
  133. &opt :exact-integer :exact-integer)
  134. :unspecific))))
  135. ;;; The general sort interface:
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137. ;;; list-sorted? < l -> boolean
  138. ;;;
  139. ;;; list-merge < l1 l2 -> list
  140. ;;; list-merge! < l1 l2 -> list
  141. ;;;
  142. ;;; list-sort < l -> list
  143. ;;; list-sort! < l -> list
  144. ;;; list-stable-sort < l -> list
  145. ;;; list-stable-sort! < l -> list
  146. ;;;
  147. ;;; list-delete-neighbor-dups l = -> list
  148. ;;;
  149. ;;; vector-sorted? < v [start end] -> boolean
  150. ;;;
  151. ;;; vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
  152. ;;; vector-merge! < v v1 v2 [start start1 end1 start2 end2] -> unspecific
  153. ;;;
  154. ;;; vector-sort < v [start end] -> vector
  155. ;;; vector-sort! < v -> unspecific
  156. ;;;
  157. ;;; vector-stable-sort < v [start end] -> vector
  158. ;;; vector-stable-sort! < v -> unspecific
  159. ;;;
  160. ;;; vector-delete-neighbor-dups v = [start end] -> vector
  161. (define-interface sorting-interface
  162. (compound-interface
  163. sorted-interface
  164. (export
  165. ((list-merge list-merge!)
  166. (proc ((proc (:value :value) :boolean) :value :value) :value))
  167. ((list-sort list-sort! list-stable-sort list-stable-sort!)
  168. (proc ((proc (:value :value) :boolean) :value) :value))
  169. (vector-merge (proc ((proc (:value :value) :boolean)
  170. :vector :vector
  171. &opt
  172. :exact-integer :exact-integer
  173. :exact-integer :exact-integer)
  174. :vector))
  175. (vector-merge! (proc ((proc (:value :value) :boolean)
  176. :vector :vector :vector
  177. &opt
  178. :exact-integer :exact-integer :exact-integer
  179. :exact-integer :exact-integer)
  180. :unspecific))
  181. ((vector-sort vector-stable-sort)
  182. (proc ((proc (:value :value) :boolean)
  183. :vector
  184. &opt
  185. :exact-integer :exact-integer)
  186. :vector))
  187. ((vector-sort! vector-stable-sort!)
  188. (proc ((proc (:value :value) :boolean) :vector) :unspecific))
  189. (list-delete-neighbor-dups
  190. (proc ((proc (:value :value) :boolean)
  191. :value)
  192. :value))
  193. (vector-delete-neighbor-dups
  194. (proc ((proc (:value :value) :boolean)
  195. :vector
  196. &opt
  197. :exact-integer :exact-integer)
  198. :vector)))))