String 了解子类型谓词函数。这在很多情况下都会非常有用(比如这一次),所以我不明白为什么我们的老师从来没有告诉过我们这件事。祝你有一个愉快的一天。这是Ada-2012的特辑,你的老师上次更新课程是什么时候?她肯定是一位老教师。也不喜欢我们在网上自学;然而她的课程很

String 了解子类型谓词函数。这在很多情况下都会非常有用(比如这一次),所以我不明白为什么我们的老师从来没有告诉过我们这件事。祝你有一个愉快的一天。这是Ada-2012的特辑,你的老师上次更新课程是什么时候?她肯定是一位老教师。也不喜欢我们在网上自学;然而她的课程很,string,character,ada,String,Character,Ada,了解子类型谓词函数。这在很多情况下都会非常有用(比如这一次),所以我不明白为什么我们的老师从来没有告诉过我们这件事。祝你有一个愉快的一天。这是Ada-2012的特辑,你的老师上次更新课程是什么时候?她肯定是一位老教师。也不喜欢我们在网上自学;然而她的课程很短:我不得不自己钻研日历和延迟程序、角色处理以及ada2012的所有新功能,她似乎对我在我们的项目中使用所有这些感到烦恼。总之,我尝试了一些代码,但是Ada.numerics.discrete_random和我的带有static_indicat


了解子类型谓词函数。这在很多情况下都会非常有用(比如这一次),所以我不明白为什么我们的老师从来没有告诉过我们这件事。祝你有一个愉快的一天。这是Ada-2012的特辑,你的老师上次更新课程是什么时候?她肯定是一位老教师。也不喜欢我们在网上自学;然而她的课程很短:我不得不自己钻研日历和延迟程序、角色处理以及ada2012的所有新功能,她似乎对我在我们的项目中使用所有这些感到烦恼。总之,我尝试了一些代码,但是Ada.numerics.discrete_random和我的带有static_indicate的子类型之间存在问题。谓词,而不是指示我不得不说我对投票结果感到困惑。。。定义一个类型以满足需求在很大程度上与编程有关。(然而,我建议制作一个-a三行main.adb来练习这段代码,特别是因为无法将错误与所示的任何行关联起来)错误都在
ada.numerics.discrete_random
中,给定您的实例化。。。编译器不允许您使用(不再兼容)子类型进行实例化。老实说,我不知道解决方案是什么,但我会使用一个包装器(例如)用基类型(“字符”)实例化并拒绝无效值,只返回满足谓词的值。凌乱的所以没有回答,这太乱了。我认为目前唯一的解决方案是按照建议枚举新类型中的每个字符(即使我想避免)。你认为我应该将这个问题标记为已回答,并针对这个问题发布一个新的问题,这与这个问题的标题并不相关吗?请参阅即将给出的答案……我想我知道问题的来源。我的子类型是从标量类型字符获得的,因此它们具有相同的基值()。问题来自这样一个事实:由于它们具有相同的基值,它们可能具有相同的第一个“和最后一个”项,离散随机包使用这些项生成随机项。()-因为这些第一项和最后一项不在我的子类型中,所以包中的函数无法正常工作。很高兴在您解释之前我理解了问题的根源。“当输入字母数字时退出”在我看来比枚举每个字符更糟糕啊哈。但这肯定是代码上的最短解决方案(而不是程序)。“pragma断言_策略(检查)”是为了什么?请注意。它确保检查谓词-例如,对于其他字符,字母数字的赋值将失败(约束错误例外)。某些编译器可能会在默认情况下保留一些复选框。您可以只说
字母数字:常量字符串:=“abcdef…6789”然后声明一个子类型
整数范围字母数字范围并用该子类型实例化离散随机。
with ada.text_io, ada.integer_text_io, ada.float_text_io, 
ada.numerics.discrete_random;
use  ada.text_io, ada.integer_text_io, ada.float_text_io;

procedure randomID is

pragma Assertion_Policy(Check);

Subtype AlphaNumeric is character 
with dynamic_predicate => AlphaNumeric in 'a'..'z' |
                                          'A'..'Z' |
                                          '1'..'9' ;

package CharGen is new ada.numerics.discrete_random (character);
CharG: CharGen.generator;

id : string (1..5);

    function random return AlphaNumeric is
    ch : character;
    begin
        loop
           ch := charGen.random(CharG);
           exit when ch in AlphaNumeric;
        end loop;
        return ch;
    end random;

begin
    for i in 1..5 loop
        CharGen.Reset(CharG); -- wait what? should be outside the loop
        id(i) := random;
    end loop;
    put_line(id);
end randomID;