在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谓词
。