Changeset 4495 for trunk/examples

Show
Ignore:
Timestamp:
10/08/08 16:25:55 (3 months ago)
Author:
pmoura
Message:

Improved performance of the object initialization and release predicates defined in the category "initialization" of the "roots" example.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/examples/roots/initialization.lgt

    r365 r4495  
    11 
    22:- category(initialization). 
    3  
    43 
    54    :- info([ 
    65        version is 1.1, 
    76        author is 'Paulo Moura', 
    8         date is 2000/11/5, 
     7        date is 2008/10/9, 
    98        comment is 'Object initialization protocol.']). 
    109 
    11  
    12     :- uses(list). 
    13  
     10    :- uses(list, [select/3]). 
    1411 
    1512    :- public(init/1). 
    16  
    1713    :- mode(init(+list), zero_or_one). 
    18  
    1914    :- info(init/1, 
    2015        [comment is 'Intialize an object with the given list of options.', 
    2116         argnames is ['Options']]). 
    2217 
    23  
    2418    :- public(valid_init_option/1). 
    25  
    2619    :- mode(valid_init_option(+nonvar), zero_or_one). 
    27  
    2820    :- info(valid_init_option/1, 
    2921        [comment is 'True if the argument is a valid initialization option.', 
    3022         argnames is ['Option']]). 
    3123 
    32  
    3324    :- public(valid_init_options/1). 
    34  
    3525    :- mode(valid_init_options(+list), zero_or_one). 
    36  
    3726    :- info(valid_init_options/1, 
    3827        [comment is 'True if the argument is list of valid initialization options.', 
    3928         argnames is ['Options']]). 
    4029 
    41  
    4230    :- public(default_init_options/1). 
    43  
    4431    :- mode(default_init_options(+list), one). 
    45  
    4632    :- info(default_init_options/1, 
    4733        [comment is 'List of default initilization options.', 
    4834         argnames is ['Options']]). 
    4935 
    50  
    5136    :- public(default_init_option/1). 
    52  
    5337    :- mode(default_init_option(?nonvar), zero_or_more). 
    54  
    5538    :- info(default_init_option/1, 
    5639        [comment is 'Default initilization option.', 
    5740         argnames is ['Option']]). 
    5841 
    59  
    6042    :- protected(process_init_option/1). 
    61  
    6243    :- mode(process_init_option(?nonvar), zero_or_one). 
    63  
    6444    :- info(process_init_option/1, 
    6545        [comment is 'Process initilization option.', 
    6646         argnames is ['Option']]). 
    6747 
    68  
    6948    :- private(process_init_options/1). 
    70  
    7149    :- mode(process_init_options(+list), zero_or_one). 
    72  
    7350    :- info(process_init_options/1, 
    7451        [comment is 'Process a list of initilization options.', 
    7552         argnames is ['Options']]). 
    7653 
    77  
    7854    :- public(free/1). 
    79  
    8055    :- mode(free(+list), zero_or_one). 
    81  
    8256    :- info(free/1, 
    8357        [comment is 'Release an object with the given list of options.', 
    8458         argnames is ['Options']]). 
    8559 
    86  
    8760    :- public(valid_free_option/1). 
    88  
    8961    :- mode(valid_free_option(+nonvar), zero_or_one). 
    90  
    9162    :- info(valid_init_option/1, 
    9263        [comment is 'True if the argument is a valid delete option.', 
    9364         argnames is ['Option']]). 
    9465 
    95  
    9666    :- public(valid_free_options/1). 
    97  
    9867    :- mode(valid_free_options(+list), zero_or_one). 
    99  
    10068    :- info(valid_free_options/1, 
    10169        [comment is 'True if the argument is list of valid delete options.', 
    10270         argnames is ['Options']]). 
    10371 
    104  
    10572    :- public(default_free_options/1). 
    106  
    10773    :- mode(default_free_options(+list), one). 
    108  
    10974    :- info(default_free_options/1, 
    11075        [comment is 'List of default delete options.', 
    11176         argnames is ['Options']]). 
    11277 
    113  
    11478    :- public(default_free_option/1). 
    115  
    11679    :- mode(default_free_option(?nonvar), zero_or_more). 
    117  
    11880    :- info(default_free_option/1, 
    11981        [comment is 'Default delete option.', 
    12082         argnames is ['Option']]). 
    12183 
    122  
    12384    :- protected(process_free_option/1). 
    124  
    12585    :- mode(process_free_option(?nonvar), zero_or_one). 
    126  
    12786    :- info(process_free_option/1, 
    12887        [comment is 'Process delete option.', 
    12988         argnames is ['Option']]). 
    13089 
    131  
    13290    :- private(process_free_options/1). 
    133  
    13491    :- mode(process_free_options(+list), zero_or_one). 
    135  
    13692    :- info(process_free_options/1, 
    13793        [comment is 'Process a list of delete options.', 
    13894         argnames is ['Options']]). 
    13995 
    140  
    14196    :- private(merge_options/3). 
    142  
    14397    :- mode(merge_options(+list, +list, -list), one). 
    144  
    14598    :- info(merge_options/3, 
    14699        [comment is 'Constructs a complete list of options complementing the explicit options with the default ones.', 
    147100         argnames is ['Options', 'Defaults', 'Result']]). 
    148101 
    149  
    150102    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). 
    156107 
    157108    default_init_options(Defaults) :- 
    158109        findall(Default, ::default_init_option(Default), Defaults). 
    159110 
    160  
    161111    valid_init_options([]). 
    162  
    163112    valid_init_options([Option| Options]) :- 
    164113        ::valid_init_option(Option), 
    165114        valid_init_options(Options). 
    166115 
    167  
    168116    valid_init_option(_). 
    169117 
    170  
    171118    process_init_options([]). 
    172  
    173119    process_init_options([Option| Options]) :- 
    174120        once(::process_init_option(Option)), 
    175121        process_init_options(Options). 
    176  
    177122 
    178123    process_init_option(Option) :- 
     
    181126        throw(error(existence_error(predicate_definition), Self::process_init_option(Option), Sender)). 
    182127 
    183  
    184  
    185128    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). 
    191133 
    192134    default_free_options(Defaults) :- 
    193135        findall(Default, ::default_free_option(Default), Defaults). 
    194136 
    195  
    196137    valid_free_options([]). 
    197  
    198138    valid_free_options([Option| Options]) :- 
    199139        ::valid_free_option(Option), 
    200140        valid_free_options(Options). 
    201141 
    202  
    203142    valid_free_option(_). 
    204143 
    205  
    206144    process_free_options([]). 
    207  
    208145    process_free_options([Option| Options]) :- 
    209146        once(::process_free_option(Option)), 
    210147        process_free_options(Options). 
    211  
    212148 
    213149    process_free_option(Option) :- 
     
    216152        throw(error(existence_error(predicate_definition), Self::process_free_option(Option), Sender)). 
    217153 
    218  
    219154    merge_options([], Defaults, Defaults). 
    220      
    221155    merge_options([Option-Value| Options], Defaults, [Option-Value| Options2]) :- 
    222156        !, 
    223         (list::select(Option-_, Defaults, Defaults2) -> 
     157        (   select(Option-_, Defaults, Defaults2) -> 
    224158            merge_options(Options, Defaults2, Options2) 
    225             ; 
    226             merge_options(Options, Defaults, Options2)). 
    227  
     159        ;   merge_options(Options, Defaults, Options2) 
     160        ). 
    228161    merge_options([Option| Options], Defaults, [Option| Options2]) :- 
    229162        merge_options(Options, Defaults, Options2). 
    230163 
    231  
    232164:- end_category.