为什么“减少” Chapel中的中缀运算符?

问题描述 投票:1回答:1

根据此manual页面,我们可以使用reduce进行还原总和(+):

var a = (+ reduce A) / num;
var b = + reduce abs(A);
var c = sqrt(+ reduce A**2);

以及最大值/位置:

var (maxVal, maxLoc) = maxloc reduce zip(A, A.domain);

[Chapel在此将reduce定义为中缀运算符,而不是函数(例如reduce( A, + ))。恕我直言,后一种形式似乎更具可读性,因为参数总是用括号分隔。因此,我想知道是出于某种原因(例如简化某些并行语法)还是出于历史原因(约定)?

reduction chapel
1个回答
0
投票

我会说答案是历史/惯例问题。华盛顿大学的ZPL语言极大地激发了Chapel的许多数组和域功能,我相信这种语法是直接从ZPL直接获得的。

当时,我们没有在Chapel中传递函数和运算符之类的概念,这可能是我们不考虑更多基于函数的方法的原因之一。 (即使现在,Chapel中一流的功能支持仍处于起步阶段,我不相信我们有办法传递运算符。)>

[我也要说Chapel是一种通常偏爱键模式语法的语言,而不是采取更多的“使一切看起来像函数/方法调用”的方法(例如,范围通过文字语法和多个键来支持运算符,而不是将对象类型与方法一起使用)。

这都不是说选择显然是正确的,或者不能被重新考虑。

© www.soinside.com 2019 - 2024. All rights reserved.