problem with reduce on array of Tuples

Adrian Matoga epi at student.agh.edu.pl
Thu May 27 03:51:26 PDT 2010


The following code fails to compile:

    double sim(Document doc, string query)
    {
        alias Tuple!(double, "wij", double, "wiq") Weights;
        Document q = Document.fromString(query);
        Weights[] wi;
        foreach (s; StrFilt(query))
            wi ~= Weights(doc.termFreq(s) * invDocFreq(s), q.termFreq
(s) * invDocFreq(s));
        return
            reduce!((double acc, Weights w) { return acc + 0; /*w.wij
* w.wiq;*/ })(0.0, wi) /
            (sqrt(reduce!((double acc, Weights w) { return acc + 0; /
*sqr(w.wij);*/ })(0.0, wi) *
             sqrt(reduce!((double acc, Weights w) { return acc + 0; /
*sqr(w.wiq);*/ }(0.0, wi)))));
    }

and DMD 2.046 shows the following messages:
ir.d(119): Error: delegate std.algorithm.__dgliteral3 cannot access
frame of fun
ction __dgliteral3
ir.d(232): Error: template instance ir.Index.sim.Reduce!(delegate
double(double
acc, Tuple!(double,"wij",double,"wiq") w)
{
return acc + 0;
}
) error instantiating
ir.d(119):        instantiated from here: reduce!(delegate double
(double acc, Tu
ple!(double,"wij",double,"wiq") w)
{
return acc + 0;
}
)


Is it my fault because of some misunderstanding or other error, or
should I report it as a bug in compiler/library?
The same function compiled well with reduce on StrFilt(query) instead
of Weights.

I attach the full source.
begin 644 ir.d
M:6UP;W)T('-T9"YS=&1I;SL-"FEM<&]R="!S=&0N<W1R:6YG.PT*:6UP;W)T
M('-T9"YC;VYV.PT*:6UP;W)T('-T9"YF:6QE.PT*:6UP;W)T('-T9"YM871H
M.PT*:6UP;W)T('-T9"YA;&=O<FET:&T[#0II;7!O<G0@<W1D+G1Y<&5C;VYS
M.PT*#0I4('-Q<BA4*2A4('@I#0I[#0H)<F5T=7)N('@@*B!X.PT*?0T*#0IC
M;&%S<R!3=')&:6QT#0I[#0H)<W1A=&EC(&)O;VQ;<W1R:6YG72!P<F5P<SL-
M"@T*"7-T871I8R!T:&ES*"D-"@E[#0H)"69O<F5A8V@@*'-T<CL at 6R`B(BP@
M(F$B+"`B=&AE(BP@(G=H870B+"`B8GDB+"`B;V8B+"`B86YD(BP@(F]R(BP@
M(G1O(BP@(F9R;VTB+"`B9&\B+"`B>65S(BP@(FYO(BP@(FYO="(L(")B=70B
M+"`B:70B+"`B:6XB+"`B:2(L(")Y;W4B+"`B:&4B+"`B<VAE(BP@(G1H97DB
M+"`B86TB(%TI#0H)"7L-"@D)"7!R97!S6W-T<ET@/2!T<G5E.PT*"0E]#0H)
M?0T*#0H)<W1A=&EC(&]P0V%L;"AS=')I;F<@;&EN92D-"@E[#0H)"7)E='5R
M;B`N9FEL=&5R(2 at H82D@>R!R971U<FX at 82`A:6X@<')E<',[('TI*'-P;&ET
M*&QI;F4N=&]L;W=E<BYT<B at B82UZ(BP@(B`B+"`B8R(I+G-T<FEP*2D[#0H)
M?0T*?0T*#0IC;&%S<R!$;V-U;65N=`T*>PT*"7-T<FEN9R!F:6QE;F%M93L-
M"@EU:6YT('=O<F1S.PT*"75I;G1;<W1R:6YG72!F<F5Q<SL-"@EU:6YT(&UA
M>$9R97$[#0H)#0H)=F]I9"!A9&1,:6YE*'-T<FEN9R!L:6YE*0T*"7L-"@D)
M9F]R96%C:"`H=V]R9#L at 4W1R1FEL="AL:6YE*2D-"@D)>PT*"0D)*RMF<F5Q
M<UMW;W)D73L-"@D)?0T*"7T-"@T*"79O:60 at 8V%L8TUA>$9R97$H*0T*"7L-
M"@D);6%X1G)E<2`](&UI;E!O<R$H(F$@/B!B(BDH9G)E<7,N=F%L=65S*5LP
M73L-"@E]#0H-"@ES=&%T:6, at 1&]C=6UE;G0 at 9G)O;49I;&4H<W1R:6YG(&9I
M;&5N86UE*0T*"7L-"@D)1&]C=6UE;G0 at 9&]C(#T@;F5W($1O8W5M96YT.PT*
M"0ED;V,N9FEL96YA;64@/2!F:6QE;F%M93L-"@D)875T;R!F:6QE(#T@;F5W
M($9I;&4H9FEL96YA;64L(")R(BD[#0H)"69O<F5A8V@@*&QI;F4[(&9I;&4N
M8GE,:6YE*0T*"0E[#0H)"0ED;V,N861D3&EN92AT;R%S=')I;F<H;&EN92DI
M.PT*"0E]#0H)"61O8RYC86QC36%X1G)E<3L-"@D)<F5T=7)N(&1O8SL-"@E]
M#0H)#0H)<W1A=&EC($1O8W5M96YT(&9R;VU3=')I;F<H<W1R:6YG('-T<BD-
M"@E[#0H)"41O8W5M96YT(&1O8R`](&YE=R!$;V-U;65N=#L-"@D)9&]C+F%D
M9$QI;F4H<W1R*3L-"@D)9&]C+F-A;&--87A&<F5Q.PT*"0ER971U<FX at 9&]C
M.PT*"7T-"@T*"61O=6)L92!T97)M1G)E<2AS=')I;F<@=&5R;2D-"@E[#0H)
M"6EF("AT97)M("%I;B!F<F5Q<RD-"@D)"7)E='5R;B`P+C`[#0H)"7)E='5R
M;B!C87-T*&1O=6)L92D at 9G)E<7-;=&5R;5T at +R!M87A&<F5Q.PT*"7T-"@D-
M"@EO=F5R<FED92!S=')I;F<@=&]3=')I;F<H*0T*"7L-"@D)<F5T=7)N(&9I
M;&5N86UE.PT*"7T-"GT-"@T*8VQA<W, at 26YD97@-"GL-"@E$;V-U;65N=%M=
M6W-T<FEN9UT@:6YD97@[#0H)8F]O;%M$;V-U;65N=%T at 9&]C<SL-"@T*"79O
M:60 at 861D*$1O8W5M96YT(&1O8RD-"@E[#0H)"6EF("AD;V,@:6X at 9&]C<RD-
M"@D)"7)E='5R;CL-"@D)9&]C<UMD;V-=(#T@=')U93L-"@D)9F]R96%C:"`H
M:V5Y+"!V86QU93L at 9&]C+F9R97%S*0T*"0E[#0H)"0EI;F1E>%MK97E=('X]
M(&1O8SL-"@D)?0T*"7T-"@D-"@ED;W5B;&4@:6YV1&]C1G)E<2AS=')I;F<@
M=&5R;2D-"@E[#0H)"6EF("AT97)M("%I;B!I;F1E>"D-"@D)"7)E='5R;B`P
M.PT*"0ER971U<FX@;&]G*&-A<W0H9&]U8FQE*2!D;V-S+FQE;F=T:"`O(&EN
M9&5X6W1E<FU=+FQE;F=T:"D[#0H)?0T*#0H)9&]U8FQE('-I;2A$;V-U;65N
M="!D;V,L('-T<FEN9R!Q=65R>2D-"@E[#0H)"6%L:6%S(%1U<&QE(2AD;W5B
M;&4L(")W:6HB+"!D;W5B;&4L(")W:7$B*2!796EG:'1S.PT*"0E$;V-U;65N
M="!Q(#T at 1&]C=6UE;G0N9G)O;5-T<FEN9RAQ=65R>2D[#0H)"5=E:6=H='-;
M72!W:3L-"@D)9F]R96%C:"`H<SL at 4W1R1FEL="AQ=65R>2DI#0H)"0EW:2!^
M/2!796EG:'1S*&1O8RYT97)M1G)E<2AS*2`J(&EN=D1O8T9R97$H<RDL('$N
M=&5R;49R97$H<RD@*B!I;G9$;V-&<F5Q*',I*3L-"@D)<F5T=7)N(`T*"0D)
M<F5D=6-E(2 at H9&]U8FQE(&%C8RP at 5V5I9VAT<R!W*2![(')E='5R;B!A8V,@
M*R`P.R`O*G<N=VEJ("H@=RYW:7$[*B\@?2DH,"XP+"!W:2D at +PT*"0D)*'-Q
M<G0H<F5D=6-E(2 at H9&]U8FQE(&%C8RP at 5V5I9VAT<R!W*2![(')E='5R;B!A
M8V,@*R`P.R`O*G-Q<BAW+G=I:BD[*B\@?2DH,"XP+"!W:2D@*B!S<7)T*')E
M9'5C92$H*&1O=6)L92!A8V,L(%=E:6=H=',@=RD@>R!R971U<FX at 86-C("L@
M,#L at +RIS<7(H=RYW:7$I.RHO('TH,"XP+"!W:2DI*2DI.PT*"7T-"@D-"@ED
M;W5B;&5;1&]C=6UE;G1=(')E=')I979E*'-T<FEN9R!Q=65R>2D-"@E[#0H)
M"61O=6)L95M$;V-U;65N=%T@<F5S=6QT.PT*"0EF;W)E86-H("AD;V,L(&([
M(&1O8W,I#0H)"7L-"@D)"7)E<W5L=%MD;V-=(#T@<VEM*&1O8RP@<75E<GDI
M.PT*"0E]#0H)"7)E='5R;B!R97-U;'0[#0H)?0T*?0T*#0II;G0@;6%I;BAS
M=')I;F=;72!A<F=S*0T*>PT*"6%U=&\@:6YD97@@/2!N97<@26YD97@[#0H)
M;&ES=&1I<B at B9&]C<R(L(&1E;&5G871E(&)O;VP@*$1I<D5N=')Y*B!D92D@
M>PT*"0EW<FET96QN*&1E+FYA;64I.R`-"@D):6YD97 at N861D*$1O8W5M96YT
M+F9R;VU&:6QE*&1E+FYA;64I*3L-"@D)<F5T=7)N('1R=64[#0H)?0DI.PT*
M"0T*"69O<F5A8V@@*&8[("A3=')&:6QT*&%R9W-;,5TI*2D@>R!W<FET96QN
M*&8I.R!]#0H)9F]R96%C:"`H:RP@=CL@:6YD97 at N<F5T<FEE=F4H87)G<ULQ
M72DI#0H)>PT*"0EW<FET969L;B at B)7, at +3X@)7,B+"!K+"!V*3L-"@E]#0H)
,<F5T=7)N(#`[#0I]
`
end


More information about the Digitalmars-d-learn mailing list