[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Accumulator



On Thu, 23 May 2002, Paul Prescod wrote:

> I'm going to avoid deeply nested expressions, but I won't add any return
> statements. I could use Python closures and CPS-ish style, but I don't
> even see a need for them, unless I've misunderstood something big.

The thing that makes continuations interesting here, which you may indeed
be misunderstanding, is how you implement this part in web context:

> def get_base_price():
>     return input("price: ")

particularly if you also assume something like

def get_tax(price):
     return state_tax(input("state or province: "))

And then especially if you worry about the fact that someone might hit the
back button, and choose a different base price after all.

If you can implement those two methods in a web app without using
continuations, such that the algorithm below can still be expressed that
simply, I'd be interested.

> Here's the algorithm:
>
> def add_tax_if_necessary(context):
>    if context.price > tax_threshold:
>        add_tax(context)
>
> def add_tax(context):
>     context.price += get_tax(context.price)
>
> def compute_price():
>    context = Struct(price = get_base_price())
>    add_tax_if_necessary(context)
>    do_something_with(context.price)
>
> The algorithm makes no use of any unusual Python features. I prefer this
> unrolled functional version because in a web server I could associate
> each function with a page using a simple dictionary. The context object
> could use whatever is available in my app server, like the .NET
> framework or J2EE. The app server would make sure that the context was
> available on whatever machine a request came on in. (Zope may have this
> capability, not sure)