Changeset 4495 for trunk/examples
- Timestamp:
- 10/08/08 16:25:55 (3 months ago)
- Files:
-
- 1 modified
-
trunk/examples/roots/initialization.lgt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/examples/roots/initialization.lgt
r365 r4495 1 1 2 2 :- category(initialization). 3 4 3 5 4 :- info([ 6 5 version is 1.1, 7 6 author is 'Paulo Moura', 8 date is 200 0/11/5,7 date is 2008/10/9, 9 8 comment is 'Object initialization protocol.']). 10 9 11 12 :- uses(list). 13 10 :- uses(list, [select/3]). 14 11 15 12 :- public(init/1). 16 17 13 :- mode(init(+list), zero_or_one). 18 19 14 :- info(init/1, 20 15 [comment is 'Intialize an object with the given list of options.', 21 16 argnames is ['Options']]). 22 17 23 24 18 :- public(valid_init_option/1). 25 26 19 :- mode(valid_init_option(+nonvar), zero_or_one). 27 28 20 :- info(valid_init_option/1, 29 21 [comment is 'True if the argument is a valid initialization option.', 30 22 argnames is ['Option']]). 31 23 32 33 24 :- public(valid_init_options/1). 34 35 25 :- mode(valid_init_options(+list), zero_or_one). 36 37 26 :- info(valid_init_options/1, 38 27 [comment is 'True if the argument is list of valid initialization options.', 39 28 argnames is ['Options']]). 40 29 41 42 30 :- public(default_init_options/1). 43 44 31 :- mode(default_init_options(+list), one). 45 46 32 :- info(default_init_options/1, 47 33 [comment is 'List of default initilization options.', 48 34 argnames is ['Options']]). 49 35 50 51 36 :- public(default_init_option/1). 52 53 37 :- mode(default_init_option(?nonvar), zero_or_more). 54 55 38 :- info(default_init_option/1, 56 39 [comment is 'Default initilization option.', 57 40 argnames is ['Option']]). 58 41 59 60 42 :- protected(process_init_option/1). 61 62 43 :- mode(process_init_option(?nonvar), zero_or_one). 63 64 44 :- info(process_init_option/1, 65 45 [comment is 'Process initilization option.', 66 46 argnames is ['Option']]). 67 47 68 69 48 :- private(process_init_options/1). 70 71 49 :- mode(process_init_options(+list), zero_or_one). 72 73 50 :- info(process_init_options/1, 74 51 [comment is 'Process a list of initilization options.', 75 52 argnames is ['Options']]). 76 53 77 78 54 :- public(free/1). 79 80 55 :- mode(free(+list), zero_or_one). 81 82 56 :- info(free/1, 83 57 [comment is 'Release an object with the given list of options.', 84 58 argnames is ['Options']]). 85 59 86 87 60 :- public(valid_free_option/1). 88 89 61 :- mode(valid_free_option(+nonvar), zero_or_one). 90 91 62 :- info(valid_init_option/1, 92 63 [comment is 'True if the argument is a valid delete option.', 93 64 argnames is ['Option']]). 94 65 95 96 66 :- public(valid_free_options/1). 97 98 67 :- mode(valid_free_options(+list), zero_or_one). 99 100 68 :- info(valid_free_options/1, 101 69 [comment is 'True if the argument is list of valid delete options.', 102 70 argnames is ['Options']]). 103 71 104 105 72 :- public(default_free_options/1). 106 107 73 :- mode(default_free_options(+list), one). 108 109 74 :- info(default_free_options/1, 110 75 [comment is 'List of default delete options.', 111 76 argnames is ['Options']]). 112 77 113 114 78 :- public(default_free_option/1). 115 116 79 :- mode(default_free_option(?nonvar), zero_or_more). 117 118 80 :- info(default_free_option/1, 119 81 [comment is 'Default delete option.', 120 82 argnames is ['Option']]). 121 83 122 123 84 :- protected(process_free_option/1). 124 125 85 :- mode(process_free_option(?nonvar), zero_or_one). 126 127 86 :- info(process_free_option/1, 128 87 [comment is 'Process delete option.', 129 88 argnames is ['Option']]). 130 89 131 132 90 :- private(process_free_options/1). 133 134 91 :- mode(process_free_options(+list), zero_or_one). 135 136 92 :- info(process_free_options/1, 137 93 [comment is 'Process a list of delete options.', 138 94 argnames is ['Options']]). 139 95 140 141 96 :- private(merge_options/3). 142 143 97 :- mode(merge_options(+list, +list, -list), one). 144 145 98 :- info(merge_options/3, 146 99 [comment is 'Constructs a complete list of options complementing the explicit options with the default ones.', 147 100 argnames is ['Options', 'Defaults', 'Result']]). 148 101 149 150 102 init(Options) :- 151 ::valid_init_options(Options), 152 ::default_init_options(Defaults), 153 ::merge_options(Options, Defaults, Options2), 154 ::process_init_options(Options2). 155 103 valid_init_options(Options), 104 default_init_options(Defaults), 105 merge_options(Options, Defaults, Options2), 106 process_init_options(Options2). 156 107 157 108 default_init_options(Defaults) :- 158 109 findall(Default, ::default_init_option(Default), Defaults). 159 110 160 161 111 valid_init_options([]). 162 163 112 valid_init_options([Option| Options]) :- 164 113 ::valid_init_option(Option), 165 114 valid_init_options(Options). 166 115 167 168 116 valid_init_option(_). 169 117 170 171 118 process_init_options([]). 172 173 119 process_init_options([Option| Options]) :- 174 120 once(::process_init_option(Option)), 175 121 process_init_options(Options). 176 177 122 178 123 process_init_option(Option) :- … … 181 126 throw(error(existence_error(predicate_definition), Self::process_init_option(Option), Sender)). 182 127 183 184 185 128 free(Options) :- 186 ::valid_free_options(Options), 187 ::default_free_options(Defaults), 188 ::merge_options(Options, Defaults, Options2), 189 ::process_free_options(Options2). 190 129 valid_free_options(Options), 130 default_free_options(Defaults), 131 merge_options(Options, Defaults, Options2), 132 process_free_options(Options2). 191 133 192 134 default_free_options(Defaults) :- 193 135 findall(Default, ::default_free_option(Default), Defaults). 194 136 195 196 137 valid_free_options([]). 197 198 138 valid_free_options([Option| Options]) :- 199 139 ::valid_free_option(Option), 200 140 valid_free_options(Options). 201 141 202 203 142 valid_free_option(_). 204 143 205 206 144 process_free_options([]). 207 208 145 process_free_options([Option| Options]) :- 209 146 once(::process_free_option(Option)), 210 147 process_free_options(Options). 211 212 148 213 149 process_free_option(Option) :- … … 216 152 throw(error(existence_error(predicate_definition), Self::process_free_option(Option), Sender)). 217 153 218 219 154 merge_options([], Defaults, Defaults). 220 221 155 merge_options([Option-Value| Options], Defaults, [Option-Value| Options2]) :- 222 156 !, 223 ( list::select(Option-_, Defaults, Defaults2) ->157 ( select(Option-_, Defaults, Defaults2) -> 224 158 merge_options(Options, Defaults2, Options2) 225 ; 226 merge_options(Options, Defaults, Options2)). 227 159 ; merge_options(Options, Defaults, Options2) 160 ). 228 161 merge_options([Option| Options], Defaults, [Option| Options2]) :- 229 162 merge_options(Options, Defaults, Options2). 230 163 231 232 164 :- end_category.
