在Ada中描述字符串类型

在Ada中描述字符串类型,ada,ada2012,spark-2014,Ada,Ada2012,Spark 2014,我有一种类似于: 类型ID是新字符串(1..7); --示例:123-456 如何在代码中指定该格式(使用Ada或SPARK) 我考虑的是静态谓词,但是字符串必须以3个正整数开头,后跟一个破折号,后跟另一组3个正整数的条件不能用静态谓词表达式来描述。必须使用动态谓词: 类型ID是新字符串(1..7) 使用动态_谓词=>(对于ID'范围内的所有I=> (第一种情况是: 当1..3 | 5..7=>ID(I)在'0'..'9'中时, 当4=>ID(I)位于“-”)时; 我自己也经常使用它,但我主

我有一种类似于:

类型ID是新字符串(1..7);
--示例:123-456
如何在代码中指定该格式(使用Ada或SPARK)


我考虑的是
静态谓词
,但是字符串必须以3个正整数开头,后跟一个破折号,后跟另一组3个正整数的条件不能用
静态谓词
表达式来描述。

必须使用
动态谓词

类型ID是新字符串(1..7)
使用动态_谓词=>(对于ID'范围内的所有I=>
(第一种情况是:
当1..3 | 5..7=>ID(I)在'0'..'9'中时,
当4=>ID(I)位于“-”)时;

我自己也经常使用它,但我主要使用
String
的类型子类型,而不是实际的新类型。

为此,必须使用
动态谓词

类型ID是新字符串(1..7)
使用动态_谓词=>(对于ID'范围内的所有I=>
(第一种情况是:
当1..3 | 5..7=>ID(I)在'0'..'9'中时,
当4=>ID(I)位于“-”)时;

我自己也经常使用它,但我主要使用
String
的类型子类型,而不是实际的新类型。

当我尝试这样做时,我得到了错误:“of”应该是“is”。我认为GNAT允许您只使用
谓词
(它决定了是使用
动态谓词
还是使用
静态谓词
)搞砸了。现在更正。@SimonWright,但这是蚊虫特有的行为,不太可能进入标准,因为它不清楚子类型是否适用于案例陈述。太好了,谢谢。它起作用了。我创建了一个单独的验证函数,并将其用作
动态谓词
。当我尝试这样做时,我得到了错误:“of”应该是“is”。我认为GNAT允许您只使用
谓词
(它解决了是为自己使用
动态谓词
还是
静态谓词
)。现在更正。@SimonWright,但这是蚊虫特有的行为,不太可能进入标准,因为它不清楚子类型是否适用于案例陈述。太好了,谢谢。它起作用了。我创建了一个单独的验证函数,并将其用作
动态\u谓词