2017-12-14 44 views
1

チャペル内に条件付きのイテレーターを作成しようとしています。これは条件付きチャプターイテレーター

y -> 2 
y -> 8 
y -> 10 
y -> 4 
y -> 12 
y -> 6 

を返す

var x = [1,4,5,2,6,3]; 

iter dx(x) { 
    for y in x do yield 2*y; 
} 

for y in dx(x) { 
    writeln("y -> ", y); 
} 

の作品私はこれらのどれもがコンパイルされません3以上であるものを返すようにしたいとします。適切な構文は何ですか?

var x = [1,4,5,2,6,3];

iter dx(x) { 
    //for y in x do {if x > 3} yield 2*y; // Barf 
    //for y in x do {if x > 3 yield 2*y }; // Barf 
    //for y in x do if x > 3 yield 2*y ; // Barf 
} 

for y in dx(x) { 
    writeln("y -> ", y); 
} 

答えて

2

エラーがあなたの代わりに条件付きで現在の要素yのイテレータ引数xに対してチェックしているということです。試してみてください:

iter dx(x) { 
    for y in x { 
    if y > 3 { 
     yield 2*y; 
    } 
    } 
} 

以上の簡潔な形で :if文の本体は、単一の文があるとき、あなたは身体を紹介ではなく、囲んするthenキーワードを使用してもよいことが

iter dx(x) { 
    for y in x do if y > 3 then yield 2*y; 
} 

注意中括弧{ }です。 Cとは異なり、thenというキーワードが必要です(構文上のあいまいさが原因で発生します)。