Language agnostic 小于时增加,小于时减少

Language agnostic 小于时增加,小于时减少,language-agnostic,programming-languages,Language Agnostic,Programming Languages,出于好奇,有没有一种(独立于语言的*)方法将这两个泛型语句组合成一个语句 if (a < b) a += x; else if (a > b) a -= x; 如果(ab)a-=x; 也可以用作 if (abs(b - a) < x) a = b; else if (a < b) a += x; else if (a > b) a -= x; if(abs(b-a)

出于好奇,有没有一种(独立于语言的*)方法将这两个泛型语句组合成一个语句

if (a < b) a += x;
else if (a > b) a -= x;
如果(ab)a-=x;
也可以用作

if (abs(b - a) < x) a = b;
else if (a < b) a += x;
else if (a > b) a -= x;
if(abs(b-a)b)a-=x;
哦,现在我在写这篇文章,我在想这样的事情:

if (a != b) a += x * (a < b ? 1 : -1);
如果(a!=b)a+=x*(a
但这并不能真正提高可读性。也许还有别的办法

  • =普通语言,而不是脑力操之类的语言或真正古老的语言

但这不是独立于语言的,如果你问我的话,这并不能真正帮助你做好准备….

独立于语言有点棘手,但是如果你有cmp或类似的,你可以使用:

a += x * cmp(b, a)
cmp(b,a)返回:

  • 如果b==a,则为0
  • 1如果b>a
  • -1如果a
此外,您建议的实现中还存在一个bug:

a = 9;
b = 10;
x = 2;

if (a < b) a += x;
if (a > b) a -= x;

print a;
如果要在一个表达式中执行此操作,可以:

a = (a < b) ? min(b, a + x) : max(b, a - x);
a=(a

但是我认为第一种方法更清晰。

您应该真正想知道为什么要这样做,编译器会进行很好的优化,并且给定的语句非常可读

a += x * sgn(b-a)
其中,
sgn
是符号功能:

sgn x | x > 0      = 1
      | x < 0      = -1
      | otherwise  = 0
sgn x | x>0=1
|x<0=-1
|否则=0

“if(a!=b)a+=x*(asignum。我想我设计的这个例子在任何语言中都是行不通的;)
a += x * sgn(b-a)
sgn x | x > 0      = 1
      | x < 0      = -1
      | otherwise  = 0