0
我有这样的表达:认识到如果再执行表达式可以跳过
(a and b or c) and d
我怎么会认识到它的进一步执行是没有意义的。例如,当
a = 0, b = 1, c = 0, d = 1
它没有意义执行最外层(...) and d
becouse整个表达式将是假的(a and b or c)
返回后假。
所以我想找到一个一般的规则,让我来分析对表达为主,找到表达的那些部分,其执行对整个表达至关重要,如果需要跳过进一步执行。下面是基于堆栈的假想代码虚拟机我是来自
ld a
ld b
and
ld c
or
ld d
and
开始与此表达我想实现什么:
ld a
ld b
and
ld c
or
jmpf outOfQuery ;;jump if false
ld d
and
outOfQuer:
一般短路'和'和'或'运营商简单地编译为条件分支('x和y' ==='如果x那么y别的FALSE','x或y' ==='如果x那么真正的其他y'),而不是'和'或'或'指令。 – sepp2k
这是罚款标量进行比较,但如果'A,B,C或D',你可能要回顾懒表情,或延期,评估与短circuting一起。 –
1.为什么downvotted? 2. @ sepp2k,你可以把你的评论作为回复?我想将您的回应标记为解决方案,因为这正是我所寻找的。答案是短路 – Puchacz