限制中出现“或”时listconfrehension的意外结果

时间:2013-07-23 08:31:38

标签: rascal

以下结果在我看来是一个奇怪的结果。

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]

1 个答案:

答案 0 :(得分:1)

是的,这确实有点奇怪但一致。

答案是“循环”每次都可以使条件成立,在逗号上回溯,并在&amp;&amp;和和||和!,但是(还)没有?:,函数调用和其他运算符。所以,

x==2 || x==2 

可以通过两种方式变为现实,这就是为什么你得到2个答案,并且使用?:它只会尝试一次。

这种迭代行为是必要的,因为我们也想要这个结果:

rascal>[x|int x<-[0..3],x==2||x==3];
list[int]: [2,3]