Как вы можете проверить, принадлежит ли элемент тому или иному подтипу? - PullRequest
9 голосов
/ 28 января 2012

Я только что узнал о Enums и Types в Ada и решил написать небольшую программу для практики:

with Ada.Text_IO;                       use Ada.Text_IO;
with Ada.Integer_Text_IO;       use Ada.Integer_Text_IO;

procedure Day is 

    type Day_Of_The_Week is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

    subtype Weekday is Day_Of_The_Week range Monday..Friday;

    subtype Weekend is Day_Of_The_Week range Saturday..Sunday;

        function is_Weekday ( dayOfTheWeek: in Day_Of_The_Week) return Boolean is
        begin
            if(--?--)
        end is_Weekday;

    selected_day_value  :   Integer;
    selected_day                :   Day_Of_The_Week;

begin
    Put_Line("Enter the number co-responding to the desired day of the week:");
    Put_Line("0 - Monday");
    Put_Line("1 - Tuesday");
    Put_Line("2 - Wednesday");
    Put_Line("3 - Thursday");
    Put_Line("4 - Friday");
    Put_Line("5 - Saturday");
    Put_Line("6 - Sunday");
    Get(selected_day_value);
    selected_day = Day_Of_The_Week'pos(selected_day_value);

    if( is_Weekday(selected_day))
        Put_Line( Day_Of_The_Week'Image(selected_day) & " is a weekday." );
    else
        Put_Line( Day_Of_The_Week'Image(selected_day) & " is a weekday." );

end Day;

У меня проблемы с оператором if.Как я могу проверить, принадлежит ли dayOfTheWeek подтипу Weekday или подтипу выходных?

Ответы [ 2 ]

9 голосов
/ 28 января 2012

Вы хотите

function is_Weekday ( dayOfTheWeek: in Day_Of_The_Week) return Boolean is
begin
    return dayoFTheWeek in Weekday;
end is_Weekday;

Кроме того, вы хотите ’Val не ’Pos в

selected_day := Day_Of_The_Week'val(selected_day_value);

, и вы можете взглянуть на слова во втором Put_Line!

2 голосов
/ 02 февраля 2012

Вам не нужна функция, чтобы проверить это. В этом случае функция только затемняет, что происходит:

if Selected_Day in Weekday then
  do stuff..
else
  do other stuff...
end if;
...