次の結果は、私には奇妙な結果に見えます。
rascal> [x|int x<-[0..3],x==2||x==2];
list[int]: [2,2]
私はこれを期待していました。
rascal> [x|int x<-[0..3],(x==2||x==2)?true:false];
list[int]: [2]
次の結果は、私には奇妙な結果に見えます。
rascal> [x|int x<-[0..3],x==2||x==2];
list[int]: [2,2]
私はこれを期待していました。
rascal> [x|int x<-[0..3],(x==2||x==2)?true:false];
list[int]: [2]
はい、これは確かに少し奇妙ですが、一貫しています。
答えは、条件を真にするたびに「ループ」が反復し、コンマ、&&、|| をバックトラックすることです。および ! ですが、(まだ) ?:、関数呼び出し、およびその他の演算子には対応していません。そう、
x==2 || x==2
2 つの方法で true にすることができるため、2 つの答えが得られます。?: を使用すると、1 回だけ試行されます。
この反復動作は、次の結果も必要になるため、必要です。
rascal>[x|int x<-[0..3],x==2||x==3];
list[int]: [2,3]