Delayed evaluation of expressions [was Re: Time we switched to unicode?]
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Wed Mar 26 19:43:21 EDT 2014
On Thu, 27 Mar 2014 09:24:49 +1100, Chris Angelico wrote:
> On Thu, Mar 27, 2014 at 4:32 AM, Rustom Mody <rustompmody at gmail.com>
> wrote:
>> Now actual python
>>
>> def sumjensen(i_get, i_set,lower,upper,exp):
>> tot = 0
>> i_set(lower)
>> while i_get() <= upper:
>> tot += exp_get()
>> i_set(i_get() + 1)
>> return tot
>>
>>
>> i=0
>> a=[3,4,5]
>> i_get = lambda : i
>> def i_set(val):
>> global i
>> i = val
>>
>> exp_get = lambda : a[i_get()]
>>
>>
>> call as sumjensen(i_get, i_set, lower, upper, exp_get)
>>
>> [Note that because of lambda's restriction to being only an expression
>> I have to make it a def because of need for global]
>
> You prove here that Python has first-class expressions in the same way
> that 80x86 assembly language has garbage collection. Sure, you can
> implement it using the primitives you have, but that's not support.
+1
Any language can work around the lack of a language feature by sufficient
layers of indirection, but that's not the same as having that language
feature.
Beyond a certain minimum feature set, all languages are Turing complete,
and so in one sense are of equivalent power. But they're not all of equal
expressiveness. Python is awesome, it is very expressive, but there are
certain things you can't write directly in Python, and have to resort to
circumlocutions instead.
See also Paul Graham's "Blub language" essay:
http://paulgraham.com/avg.html
--
Steven D'Aprano
http://import-that.dreamwidth.org/
More information about the Python-list
mailing list