On 8/10/19 2:17 AM, Waldek Hebisch wrote:
> oldk1331 wrote::
>>
>> I don't like the grammar that uses
>>
>> "func"/list1
>>
>> to do
>>
>> reduce(func, list1)
>>
>>
>> First, this is a strange grammar.
>>
>> Also I don't like to have special grammar to do things can
>> be done by normal grammar.
>
> I am affraid the classic answer is appropriate here
> "it is a feature, not a bug".
>
> Expanding on it a bit: it is usual that syntactic choices
> cause some disagreement. From my point of view this is
> useful shortcut for frequently occuring operation.
We already have an useful shortcut for this frequently
occurring pattern (the reduce pattern): function "reduce".
> It does not significantly increase complexity of the
> parser and beside parser we need smal amount of extra
> code. So from implementation point of view it is
> cheap feature. I so no reason to remove it.
I think it's bad design to have special grammar do things
that normal function can do.
> @Ralf: this construct kowns about identity for several
> popular operations, so in such case works also for empty
> lists. Of course, it would be nicer to do this in more
> systematic way.
It's also a bad design to hard-code extra knowledge into
compiler.
>> This patch replaces '"append"/' with normal function call
>> 'concat : List % -> %', it's simpler and faster.
>>
>
> Well, simpler is debatable. Faster is useful if speed
> matters.
For common usage, we already have "gcd : List(%) -> %"
defined as "gcd(l : List %) == reduce(gcd, l, 0, 1)".
now comparing the following:
"gcd"/[f(i) for i in l]
gcd [f(i) for i in l]
At least it is 3 characters simpler and less confusing.
>>
>> If you agree, I plan to replace other usage of '"func"/' by
>> normal function calls.
>>
>> grep '"[a-zA-Z]*" */' *spad shows 135 usage of such grammar,
>> only uses function max/min/setUnion/and/or/gcd/lcm.
>
> Well, as I wrote I think that "op"/... is a useful feature.
> And it is useful to have some test cases for features.
> So I would like to keep some (preferaby most) of uses of
> this construct.
>
I propose I only do the cleanup for "concat", "gcd" , "lcm"
for now, because they already have signature "List % -> %".