没有parens我怎么能做这个操作?

How can I do this operation without parens?

Here 我读到 "The Babylonians came up with the "四分之一平方乘法”,它将乘法简化为减法:

a*b = (a+b)^2/4 - (a-b)^2/4

当我在 APL 中尝试这个时,我得到了这个:

(((a + b) * 2) ÷ 4) - (((a - b) * 2) ÷ 4)

但是这么多家长不是很丑吗?我无法弄清楚如何将“÷ 4”放在“(a + b) * 2)”之前,以便它根据 "right to left" 规则最后执行。

您可能需要查看 "commute" 运算符。它采用单个函数并派生出一个与旧函数相同的新函数,但交换了参数:

      5-2
3
      5-⍨2
¯3

所以你的公式可以写成:

(4 ÷⍨ 2 *⍨ a + b) - (4 ÷⍨ 2*⍨ a - b)

The full documentation is here.

(免责声明:我以前从未见过 APL,所以这可能不是地道的。但这只是一种编程语言;它有多难?)

我想出了以下完全不使用括号的方法:

-/2*⍨0.5×a+b×1 ¯1

算法:

  • 创建一个包含 [1, -1].
  • 的数组
  • 将每个元素乘以 b,得到 [b, -b]
  • a添加到每个元素,得到[a+b, a-b]
  • 将每个元素乘以 1/2 (0.5),得到 [(a+b)/2, (a-b)/2]
  • 对每个元素求平方(使用交换运算符 将指数放在左边),得到 [((a+b)/2)^2, ((a-b)/2)^2],等价于 [(a+b)^2 / 4, (a-b)^2 / 4].
  • 将元素彼此相减,得到 (a+b)^2 / 4 - (a-b)^2 / 4

很抱歉来晚了,但这里有一个只有一组括号的解决方案——括号内的短语是 Train,其中 a (f g h) b ←→ (a f b) g a h b:

-⌿4 ÷⍨ 2 *⍨ a (+ ,[⎕IO-0.5] -) b

只有一对 ()

  4÷⍨-/2*⍨(+/,-/)10 2
20