[erlang-bugs] QLC bug

Robert Virding robert.virding@REDACTED
Wed Jun 22 04:17:37 CEST 2011


If you generate the expansion from the example in documentation:

qlc:q([{A,X,Z,W} ||
          A <- [a,b,c],
          {X,Z} <- [{a,1},{b,4},{c,6}],
          {W,Y} <- [{2,a},{3,b},{4,c}],
          X =:= Y]).

and then from the equivalent canonical form:

qlc:q([{A,X,Z,W} ||
          A <- [a,b,c],
          {X,Z} <- [{a,1},{b,4},{c,6}],
          {W,Y} <- [{2,a},{3,b},{4,c}],
          erlang:'=:='(X, Y)]).

you find that they are VERY different. The first one is much larger with more cases in it. I don't know if they are equivalent. Note that this is *exactly the same code* with just a different way of writing the equality test.

If they are not equivalent then it is definitely a bug as both forms are equivalent, X =:= Y is just the operator syntax for the canonical form erlang:'=:='(X, Y).

Even if they are equivalent then it is probably also as bug as there is no reason for the expansions to be different as again the code is the same.

A quick idea as to why it is like this is that the special handling of operators is done before it is converted into the canonical form.

Robert

-- 
Robert Virding, Erlang Solutions Ltd.




More information about the erlang-bugs mailing list