I agree that we have not been understanding each other.
From you original post that I responded to:
The thing is, we can't just create a ∑ function, because it doesn't
work the way the summation operator works. The problem is that we
would want syntactic support, so we could write something like this:
>>>>> p = 2
>>>>> ∑(n, 1, 10, n**p)
The initial misunderstanding is that I interpreted 'something like this'
more loosely than you meant it. So I wrote something that was 'something
like the above' to me but not to you. I interpreted 'something like'
semantically* whereas you apparently meant is syntactically. I added the
one or the other little marks needed to make the above work in python as
it is whereas your 'something like' excludes such marks or any other
current possibility I can think of. So I actually agree that "can't" is
correct in relation to what you meant, as opposed to what I understood.
Changing "can't" to "can" would requires a major change to Python. That
change is one I would strongly oppose and I will try to explain more
clearly why.
[*When I qualify doc suggestions on the tracker with 'something like',
as I usually do, I mean something that conveys the same meaning. So I
edited your call text to convey the intended meaning in Python.]
Lets start with things we should agree on. The first two are mostly not
specific to Python.
1. When a compiler encounters an expression in code, there are at least
three things it can do:
1a. compile it so that it is immediately executed when encountered at
runtime (let this be the default);
1b. compile it so that it is somehow saved for execution later or
elsewhere (the alternative of concern here);
1c. compile it for a different alternative, such as turning an implied
'get' operation into a 'set' operation.
2. A code writer who wants an alternative treatment for a particular
must somehow delineate the expresion with boundary markers that, in
context at least, also indicate the alternative treatment. There are,
broadly, two possibilities:
2a. Use a generic quotation mechanism that can be applied to any
expression most any place. I call this explicit quoting.
2b. Use the expression in a special form that the compiler knows about.
The special form must have begin-end markers of some sort. I call this
implicit quoting. If human readers do not know that a particular form is
a special form, they may have a problem understanding the code.
Python has 2 pairs of generic explicit delimiters: open-close quote
marks and lambda-<EndofLambda>, where <EndofLambda> is ',', ')',
<EndofLine>, or maybe something else. If these are not present, the
default immediate execution mode is used for expressions in function
calls that are not themselves marked for alternative treatment.
Python's special forms are statements. Each has its own pair of
delimiters. Assignments use <BeginningofLine> and '='. 'For' loops use
'for' and 'in'. Other statements use 'as' and usually <EndofLine>.
Statements and functions call are syntactically very distinct, so there
is little possibility of confusion. I consider this a major feature of
python and I would oppose breaking it.
Lisp, for instance, uses s-expressions for everything, including what
would either function calls or statements in Python. Special functions
implicitly quote some argument expressions, but not necessarily all,
while normal functions do not quote any. The only way to know is to
know, and I found it confusing and difficult to remember.
> Sum(i, 1, 100, V[i])
> In Algol60, this function call would:
> - pass the name "i" (not a string!) as the first argument;
> - pass 1 as the second argument;
> - pass 100 as the third argument;
> - pass the expression "V[i]" (not a string!) as the fourth argument
which depends for this operation on
> https://en.wikipedia.org/wiki/Jensen%27s_device
I read the whole article, including the criticisms and the fact that it
was not widely adopted and has been more or less superceded by macros.
It did not answer the obvious question: suppose the call is Sum(i, l, h,
V[i]). How is the reader supposed to know that 'i' and 'V[i]' get quoted
and the other args do not? The article included
real procedure Sum(k, l, u, ak)
value l, u;
integer k, l, u;
real ak;
comment k and ak are passed by name;
begin
real s;
s := 0;
for k := l step 1 until u do
s := s + ak;
Sum := s
end;
If that is supposed to be real code that can be compiled, I see no way
for the comment to be true. Or is the mechanism limited to builtin
functions?
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list