I’m working on the Rosetta Code Task “Inverted Index”.
The first half seems to work fine.
The second half (using Ada 2012 feature(s), fails for me as follows:
gnatmake -gnat2012 ./inverted_index.adb
generic_inverted_index.adb:71:27: error: name must be an iterator, not a container
generic_inverted_index.adb:71:27: error: to iterate directly over the elements of a container, write “of The_Sources”
gnatmake: “./inverted_index.adb” compilation error
I’ve fixed the syntax for the generalized loop iteration of Ada 2012. It has to use “of” instead of “in”. The original author might have used a still experimental implementation of the feature.
procedure Iterate(The_Sources: Vector) is
begin
- for Some_Element in The_Sources loop
- Do_Something(Element(Some_Element));
+ for Some_Element of The_Sources loop
+ Do_Something(Some_Element);
end loop;
end Iterate;
Is this a complete fix? I run into more syntax errors after making this change.
diff ./ORIGINAL_generic_inverted_index.adb ./generic_inverted_index.adb
71c71
< for Some_Element in The_Sources loop
for Some_Element of The_Sources loop
gnatmake -gnat2012 ./inverted_index.adb
gcc -c -I./ -gnat2012 -I- ./inverted_index.adb
generic_inverted_index.adb:72:23: error: no candidate interpretations match the actuals:
generic_inverted_index.adb:72:23: error: missing argument for parameter “Key” in call to “Element” (inherited) at generic_inverted_index.ads:54
generic_inverted_index.adb:72:23: error: missing argument for parameter “Index” in call to “Element” declared at a-coinve.ads:157, instance at generic_inverted_index.ads:12
generic_inverted_index.adb:72:31: error: expected private type “Ada.Containers.Indefinite_Vectors.Cursor” from instance at generic_inverted_index.ads:12
generic_inverted_index.adb:72:31: error: found private type “Source_Type” defined at generic_inverted_index.ads:5
generic_inverted_index.adb:72:31: error: ==> in call to “Element” at a-coinve.ads:161, instance at generic_inverted_index.ads:12
gnatmake: “./inverted_index.adb” compilation error