如何在没有parens的情况下执行此操作?

时间:2018-10-23 17:10:19

标签: apl

Here我读到“巴比伦人想出了“四分之一平方乘法”,它将乘法减为减法:

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

当我在APL中尝试此操作时,结果如下:

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

但是所有这些parrens难道不是很丑吗?我无法弄清楚如何将“ ÷ 4”放在“ (a + b) * 2)”之前,以便根据“从右到左”规则最后执行它。

4 个答案:

答案 0 :(得分:2)

您可能需要研究“通勤”运算符。它只需要一个函数并派生出一个与旧函数相同的新函数,但是交换了参数:

      5-2
3
      5-⍨2
¯3

因此您的公式可以写为:

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

The full documentation is here.

答案 1 :(得分:0)

(免责声明:我以前从未见过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

答案 2 :(得分:0)

很抱歉晚到派对,但这是一个只有一组括号的解决方案-括号内的短语是Train,其中a (f g h) b ←→ (a f b) g a h b

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

答案 3 :(得分:0)

只需一对()

start