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]
4

1 に答える 1

1

はい、これは確かに少し奇妙ですが、一貫しています。

答えは、条件を真にするたびに「ループ」が反復し、コンマ、&&、|| をバックトラックすることです。および ! ですが、(まだ) ?:、関数呼び出し、およびその他の演算子には対応していません。そう、

x==2 || x==2 

2 つの方法で true にすることができるため、2 つの答えが得られます。?: を使用すると、1 回だけ試行されます。

この反復動作は、次の結果も必要になるため、必要です。

rascal>[x|int x<-[0..3],x==2||x==3];
list[int]: [2,3]
于 2013-07-23T19:34:16.367 に答える