Logic 通用编程逻辑

Logic 通用编程逻辑,logic,mathematical-optimization,Logic,Mathematical Optimization,我有一个一般性的问题-关于值的测试,我多次遇到这个问题,最后我用一些难看的长代码来完成一些逻辑上看起来很简单的事情 问题是——我有一个或多个值要与其他值进行对比测试……这样我的代码在概念上就变成这样了 IF (A > B AND A < C AND A < D AND A < E) THEN print "Yes" 逻辑上,我可以把它表示为A>b,c,d,e等等 如果我还需要检查该列表中的其他值,那么您可以看到,要测试的条件语句可能会比条件打算生成的代码大得多,也更

我有一个一般性的问题-关于值的测试,我多次遇到这个问题,最后我用一些难看的长代码来完成一些逻辑上看起来很简单的事情

问题是——我有一个或多个值要与其他值进行对比测试……这样我的代码在概念上就变成这样了

IF (A > B 
AND A < C 
AND A < D
AND A < E)
THEN print "Yes"
逻辑上,我可以把它表示为A>b,c,d,e等等

如果我还需要检查该列表中的其他值,那么您可以看到,要测试的条件语句可能会比条件打算生成的代码大得多,也更混乱

必须有一种有问题的或数学的方法来表达这个常见的例子


我知道每种语言都有“语法”特定的方法来实现这一点,但是。。我将听取建议并尝试使用它们。

在SQL中,我常常不知道是否所有方言都支持中间运算符。它需要一个上限值和一个下限值,因此您必须执行类似于Oracle 10g的操作:

select 1
from dual
where 1 between 0 and (select min(x) from (select 2 x from dual
                                           union
                                           select 3 x from dual 
                                           union
                                          select 4 x from dual)) ;
很明显,这是非常做作的,因为我必须联合多个select from DUAL来组成列表来选择MIN from

使用变量重写

select A
from some_table
where A between B and (select min(x) from (select C x from somewhere
                                           union
                                           select D x from somewhere
                                           union
                                          select E x from somewhere)) ;
你想要

如果A>b、c、d、e

所以也许

if a > max(b,c,d,e)

这符合您的要求吗?

如果您想要代码中的测试,至少可以使用python

if B<A<min(C,D,E):
    print "Yes"
if A>max(B,C,D,E):
    print "Yes"

这里有两个问题:1是否有更简洁的方法来编写此代码?这在计算上有效吗

murgatroid99和τεκ对于如何生成更干净的代码都有很好的答案。但是这两种方法实际上至少在表面上是这样的,假设编译器没有在后台进行优化,那么计算效率就会降低

想想看:如果a>maxb,c,d,e告诉系统调用max,这会添加到堆栈中,复制参数,等等。调用可能会以某种方式内联,因此您不是在谈论性能上的巨大损失,而是有一些开销。max函数必须将每个数字与另一个数字进行比较,这需要时间来完成

另一方面,您最初编写的语句,如果A>B和A
boolean smallerThanElements(int a, int[] elements) {
    for (int elt : elements) {
        if (a > elt) return false;
    }
    return true;
}

现在,您的列表可以扩展到任意大小,但仍然会短路。函数调用仍然会带来一些开销,但是您已经将预期性能降低到了最佳情况O1和最坏情况On的平均值的/2。它将if语句简化为if a>b和smallerThanElementsa,eltArray。

这两个语句不一样。第一个有AC,D,E。你要什么还不完全清楚。在现有的计算机语言中,这是一种表达更简洁的方式吗?计算机语言的假想扩展?数学符号不在本网站的范围之内。根据第一个代码示例,我认为如果a>b和a