0

ここに問題があります。

データ型とデータ型のセットがあるとします。

data Color=red(int n, str name)|black(int n, str name);

set[Color] coloredBalls={red(1,"a"), red(2,"b")};

セットの要素を繰り返し処理し、次のように要素を変更したいと思います。

for(Color aColor <- coloredBalls)
{
    if(aColor.n == 2)
        aColor.str="bb"

    //I would like to change the node: red(2,"b") to red(2,"bb") in the set coloredBalls
    //but am unable to express it in Rascal, unless I recourse to using a "Map", which I
    //think obfuscates the code quite a bit. Maybe using switch/visit with case does the trick?
}
4

1 に答える 1

2

必要な新しいセットを作成する方法はたくさんあります (もちろん、既存のセットを実際に変更することはできません)。

訪問を使用できます:

coloredBalls = visit (coloredBalls) {
  case red(a,b) => red(a, b + "b")
}

または、内包表記を使用しますis:

coloredBalls = { x is red ? x[name=name+"b"] : x | x <- coloredBalls};

または、ジェネレーター側でパターン マッチを使用する場合:

coloredBalls = {red(a, b + "b") | red(a,b) <- coloredBalls} + { y | y <- coloredBalls, !(y is red)};

または、内包表記の挿入側でパターン マッチを使用します。

coloredBalls = {red(a,b) := c ? red(a,b+"b") : c | c <- coloredBalls};
于 2014-12-01T16:32:10.193 に答える