在此上下文中需要子类型标记 - Ada
Subtype Mark Required in this context - Ada
我正在努力在 Ada 中实现素数分解函数。我需要 return 来自 calc_prime_numbers
的向量。我试图将该向量存储在 Y
中。但是,每当我编译时,编译器都会说 prime.adb:40:07: subtype mark required in this context
。我不确定那是什么意思。需要子类型是什么意思?我该如何解决?
with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers.Vectors;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers;
procedure Prime is
package Integer_Vectors is new Vectors(Natural, Integer);
function Is_Prime(I : Integer) return Boolean is
J : Integer := 2;
begin
for J in 2 .. I-1 loop
if I mod J = 0 then
return False;
end if;
end loop;
return True;
end Is_Prime;
function calc_prime_numbers(n : Integer) return Integer_Vectors.Vector is
i : Integer := 0;
m : Integer;
Numbers : Integer_Vectors.Vector;
begin
m := n + 1;
while (true) loop
i:=i + 1;
if Is_Prime(i) then
Integer_Vectors.Append(Numbers, i);
Put(Integer'Image(i) & " + ");
end if;
if i = m then
exit;
end if;
end loop;
New_Line;
return Numbers;
end calc_prime_numbers;
X : Integer;
Y : Integer_Vectors; — line 40
begin
while (true) loop
Get(X);
if Is_Prime(X) then
Put(Integer'Image(X) & " is prime.");
else
Put(Integer'Image(X) & " is not prime.");
end if;
New_Line;
Y := calc_prime_numbers(X); — line 40
end loop;
end Prime;
您在错误消息中的行号与您粘贴的代码不匹配,并且您没有指出第 40 行在哪里,所以我只能猜测:
您实例化了一个名为 Integer_Vectors
的包。稍后您声明一个变量 Y : Integer_Vectors;
。所以编译器会抱怨,因为它需要变量的类型,而你提供的是包的名称。
我正在努力在 Ada 中实现素数分解函数。我需要 return 来自 calc_prime_numbers
的向量。我试图将该向量存储在 Y
中。但是,每当我编译时,编译器都会说 prime.adb:40:07: subtype mark required in this context
。我不确定那是什么意思。需要子类型是什么意思?我该如何解决?
with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers.Vectors;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Containers;
procedure Prime is
package Integer_Vectors is new Vectors(Natural, Integer);
function Is_Prime(I : Integer) return Boolean is
J : Integer := 2;
begin
for J in 2 .. I-1 loop
if I mod J = 0 then
return False;
end if;
end loop;
return True;
end Is_Prime;
function calc_prime_numbers(n : Integer) return Integer_Vectors.Vector is
i : Integer := 0;
m : Integer;
Numbers : Integer_Vectors.Vector;
begin
m := n + 1;
while (true) loop
i:=i + 1;
if Is_Prime(i) then
Integer_Vectors.Append(Numbers, i);
Put(Integer'Image(i) & " + ");
end if;
if i = m then
exit;
end if;
end loop;
New_Line;
return Numbers;
end calc_prime_numbers;
X : Integer;
Y : Integer_Vectors; — line 40
begin
while (true) loop
Get(X);
if Is_Prime(X) then
Put(Integer'Image(X) & " is prime.");
else
Put(Integer'Image(X) & " is not prime.");
end if;
New_Line;
Y := calc_prime_numbers(X); — line 40
end loop;
end Prime;
您在错误消息中的行号与您粘贴的代码不匹配,并且您没有指出第 40 行在哪里,所以我只能猜测:
您实例化了一个名为 Integer_Vectors
的包。稍后您声明一个变量 Y : Integer_Vectors;
。所以编译器会抱怨,因为它需要变量的类型,而你提供的是包的名称。