1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
;; -*-theme-d-*-
;; Copyright (C) 2016, 2021 Tommi Höynälänmaa
;; Distributed under GNU Lesser General Public License version 3,
;; see file doc/LGPL-3.
(define-interface (standard-library nonpure-iterator)
(import (standard-library core))
(declare :nonpure-consumer <param-logical-type>)
(define-param-logical-type :nonpure-iterator-inst (%source %target)
(:procedure ((:nonpure-consumer %source %target)) %target nonpure))
(define-param-logical-type :nonpure-iterator (%source)
(:param-proc (%target) ((:nonpure-consumer %source %target)) %target
nonpure))
(define-param-logical-type :nonpure-consumer (%source %target)
(:procedure ((:maybe %source) <boolean>
(:maybe (:nonpure-iterator-inst %source %target)))
%target nonpure))
(declare-param-method nonpure-end-iter (%source %target)
((:nonpure-consumer %source %target))
%target nonpure)
(declare-param-method gen-list-nonpure
(%source %target)
((:uniform-list %source)
(:nonpure-consumer %source %target)
(:nonpure-iterator-inst %source %target))
%target nonpure)
(declare-param-method get-list-nonpure-iterator (%source)
((:uniform-list %source))
(:nonpure-iterator %source)
nonpure)
(declare-param-method gen-mutable-vector-nonpure
(%source %target)
((:mutable-vector %source)
(:nonpure-consumer %source %target)
(:nonpure-iterator-inst %source %target))
%target nonpure)
(declare-param-method get-mutable-vector-nonpure-iterator
(%source)
((:mutable-vector %source))
(:nonpure-iterator %source)
nonpure)
(declare-param-method nonpure-iter-map1
(%source %component)
((:procedure (%source) %component nonpure)
(:nonpure-iterator %source))
(:uniform-list %component)
nonpure)
(declare-param-method nonpure-iter-map2
(%source1 %source2 %component)
((:procedure (%source1 %source2)
%component nonpure)
(:nonpure-iterator %source1)
(:nonpure-iterator %source2))
(:uniform-list %component)
nonpure)
(declare-param-method nonpure-iter-every1
(%source)
((:procedure (%source) <boolean> nonpure)
(:nonpure-iterator %source))
<boolean>
nonpure)
(declare-param-method nonpure-iter-every2
(%source1 %source2)
((:procedure (%source1 %source2)
<boolean> nonpure)
(:nonpure-iterator %source1)
(:nonpure-iterator %source2))
<boolean>
nonpure)
(declare-param-method nonpure-iter-for-each1
(%source)
((:procedure (%source) <none> nonpure)
(:nonpure-iterator %source))
<none>
nonpure)
(declare-param-method nonpure-iter-for-each2
(%source1 %source2)
((:procedure (%source1 %source2)
<none> nonpure)
(:nonpure-iterator %source1)
(:nonpure-iterator %source2))
<none>
nonpure)
(declare-param-method gen-generator
(%source %target)
((:procedure () %source nonpure)
(:procedure (%source) <boolean> pure)
(:nonpure-consumer %source %target)
(:nonpure-iterator-inst %source %target))
%target
nonpure)
(declare-param-method generator->iterator
(%source)
((:procedure () %source nonpure)
(:procedure (%source) <boolean> pure))
(:nonpure-iterator %source)
nonpure))
|