假设我的数据类型定义如下:
data Constraint=type1(Lab al,Lab a2)| type2(Lab a1,TypeRoot tt)|....
其中一般模式是每个构造函数的第一个参数类型为' Lab'。那么,有一种表达模式匹配的有效/清晰的方式来执行以下操作吗?
for (Constraint cc <- constraints)
if( type1(Lab label,_):= cc || type2(Lab label,_):=cc || .... )
//do something useful with label. Infact, this snippet of code appears within
//a function body, and I need to perform the match for a specific label; as follows:
if(label==labelOfInterest) return cc;
虽然我在这,并且反对StackOverflow提出的问一个问题/线程的建议,Rascal是否支持简单的类似Java的递归?
答案 0 :(得分:1)
您可以通过has
运算符检查字段是否存在。有关详细信息,请参阅Rascal Tutor。
您的代码将变为类似:
for (Constraint cc <- constraints)
if( cc has a1 || .... )
if(cc.label==labelOfInterest) return cc;
甚至更好:
for (Constraint cc <- constraints)
if( (cc has a1 && cc.label == labelOfInterest) || .... )
return cc;