interfaces.scm 7.0 KB

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