0

假设我有一个定义如下的数据类型:

data Constraint=type1(Lab al,Lab a2)| type2(Lab a1,TypeRoot tt)|....

其中一般模式是每个构造函数的第一个参数是“实验室”类型。那么,是否有一种有效/清晰的方式来表达模式匹配以执行以下操作?

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 的递归?

4

1 回答 1

1

您可以通过操作员检查字段是否存在has。有关详细信息,请参阅流氓导师

然后您的代码将变为:

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;
于 2014-11-16T22:11:15.303 回答