remove optional (+)/1 prefix in get_atts/2 and put_atts/2 calls
The (+)/1 prefix in get_atts/2 at line 4219 by itself already causes a greater than 15% slowdown for the benchmark shown in #1730: ?- N #= 2^14, time(((between(1, N, _), X #\= Y, false) ; true)). The performance impact is not a good reason to remove the optional (+)/1 prefix! Performance issues should be addressed at the root, in this case get_atts/2 (#1962). We should never manually work around performance issues in built-in predicates. In contrast, readability is a good argument, and I find the calls slightly easier to read without the optional (+)/1 prefix. The prefix is now consistently omitted when possible.
This commit is contained in:
@@ -3967,7 +3967,7 @@ insert_queue(Element, Which) -->
|
|||||||
Tail0 = [Element|Tail]
|
Tail0 = [Element|Tail]
|
||||||
; Head = [Element|Tail]
|
; Head = [Element|Tail]
|
||||||
),
|
),
|
||||||
put_atts(Arg, +queue(Head,Tail)) }.
|
put_atts(Arg, queue(Head,Tail)) }.
|
||||||
|
|
||||||
|
|
||||||
domain_spread(Dom, Spread) :-
|
domain_spread(Dom, Spread) :-
|
||||||
@@ -4199,9 +4199,9 @@ ignore(Goal) :- ( Goal -> true ; true ).
|
|||||||
|
|
||||||
print_queue -->
|
print_queue -->
|
||||||
state(queue(Goal,Fast,Slow,_)),
|
state(queue(Goal,Fast,Slow,_)),
|
||||||
{ ignore(get_atts(Goal, +queue(GHs,_))),
|
{ ignore(get_atts(Goal, queue(GHs,_))),
|
||||||
ignore(get_atts(Fast, +queue(FHs,_))),
|
ignore(get_atts(Fast, queue(FHs,_))),
|
||||||
ignore(get_atts(Slow, +queue(SHs,_))),
|
ignore(get_atts(Slow, queue(SHs,_))),
|
||||||
format("Current queue:~n goal: ~q~n fast: ~q~n slow: ~q~n~n", [GHs,FHs,SHs]) }.
|
format("Current queue:~n goal: ~q~n fast: ~q~n slow: ~q~n~n", [GHs,FHs,SHs]) }.
|
||||||
|
|
||||||
|
|
||||||
@@ -4216,14 +4216,14 @@ queue_get_arg(Which, Element) -->
|
|||||||
|
|
||||||
queue_get_arg_(Queue, Which, Element) :-
|
queue_get_arg_(Queue, Which, Element) :-
|
||||||
arg(Which, Queue, Arg),
|
arg(Which, Queue, Arg),
|
||||||
get_atts(Arg, +queue([Element|Elements],Tail)),
|
get_atts(Arg, queue([Element|Elements],Tail)),
|
||||||
( var(Elements) ->
|
( var(Elements) ->
|
||||||
put_atts(Arg, -queue(_,_))
|
put_atts(Arg, -queue(_,_))
|
||||||
; put_atts(Arg, +queue(Elements,Tail))
|
; put_atts(Arg, queue(Elements,Tail))
|
||||||
).
|
).
|
||||||
|
|
||||||
queue_enabled --> state(queue(_,_,_,Aux)), { \+ get_atts(Aux, disabled) }.
|
queue_enabled --> state(queue(_,_,_,Aux)), { \+ get_atts(Aux, disabled) }.
|
||||||
disable_queue --> state(queue(_,_,_,Aux)), { put_atts(Aux, +disabled) }.
|
disable_queue --> state(queue(_,_,_,Aux)), { put_atts(Aux, disabled) }.
|
||||||
enable_queue --> state(queue(_,_,_,Aux)), { put_atts(Aux, -disabled) }.
|
enable_queue --> state(queue(_,_,_,Aux)), { put_atts(Aux, -disabled) }.
|
||||||
|
|
||||||
portray_propagator(propagator(P,_), F) :- functor(P, F, _).
|
portray_propagator(propagator(P,_), F) :- functor(P, F, _).
|
||||||
|
|||||||
Reference in New Issue
Block a user