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评估第一学期没有意义.它将没有多大关系的表现,明智的,如果x和y是标量,但如果我们假装自己是大矩阵和操作是昂贵的(并且适用于矩阵),那么这无疑会有所作为.当然,你可以通过if C!=0发表声明来避免这种极端情况.
所以我的问题是这个功能是否存在以及它是否有用.我不是一个程序员,所以它可能以某种名义,我没有遇到过; 如果是这样请赐教:)
你所谈论的概念有不同的名称:懒惰的评估,非严格的评估,需要的呼叫,仅举几例,实际上比避免乘法更加强大.
有一些编程语言,如Haskell或Frege,其评估模型是非严格的.在那里编写"短路"乘法运算符非常容易,例如你可以编写类似的东西:
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)