有短路倍增这样的东西吗?

Ver*_*rge 6 language-agnostic arithmetic-expressions short-circuiting

我们都知道逻辑表达式中的短路,即何时

if ( False AND myFunc(a) ) then
...
Run Code Online (Sandbox Code Playgroud)

不打扰执行myFunc()因为if条件不可能是真的.

我很好奇是否有相应的日常代数方程式,比如说

result = C*x/y + z
Run Code Online (Sandbox Code Playgroud)

如果C=0评估第一学期没有意义.它将没有多大关系的表现,明智的,如果xy是标量,但如果我们假装自己是大矩阵和操作是昂贵的(并且适用于矩阵),那么这无疑会有所作为.当然,你可以通过if C!=0发表声明来避免这种极端情况.

所以我的问题是这个功能是否存在以及它是否有用.我不是一个程序员,所以它可能以某种名义,我没有遇到过; 如果是这样请赐教:)

Ing*_*ngo 6

你所谈论的概念有不同的名称:懒惰的评估,非严格的评估,需要的呼叫,仅举几例,实际上比避免乘法更加强大.

有一些编程语言,如HaskellFrege,其评估模型是非严格的.在那里编写"短路"乘法运算符非常容易,例如你可以编写类似的东西:

infixl 7 `*?`        -- tell compiler that ?* is a left associative infix operator
                     -- with precedence 7 (like the normal *)

0 *? x = 0           -- do not evaluate x
y *? x = y * x       -- fall back to standard multiplication
Run Code Online (Sandbox Code Playgroud)