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

Re: CPS != call/cc




On Wednesday, August 6, 2003, at 01:10  PM, John Clements wrote:

>
> On Wednesday, August 6, 2003, at 11:00  AM, Peter J. Wasilko, Esq. 
> wrote:
>
>>> Well... it can sort of help, but there are some limits. Multiple
>>> stacks tend to solve other problems, and they're certainly useful,
>>> but for a CPS scheme you really need more of a linked frame system
>>> than a stack system, since the control information really builds up a
>>> tree (albeit one often with a single branch) rather than a stack.
>>
>> Dan,
>>
>>     I see, so what would an optimal hardware architecture be for
>> supporting CPS?
>
> CPS, or continuation-passing-style, is not the same thing as a 
> language that includes primitives for continuations.
>
> EXAMPLE:
>
> this program is in CPS (w.r.t. user-defined procedures):
>
> (define (fact-cps n k)
>   (if (= n 0)
>     (k 1)
>     (fact-cps (- n 1) (lambda (x) (* x n)))))

... of course I was going to make a mistake.  Here's the correction:

(define (fact-cps n k)
   (if (= n 0)
     (k 1)
     (fact-cps (- n 1) (lambda (x) (k (* x n))))))

>
> Look!  No call/cc, no stack-copying.  Just procedures that happen to 
> represent continuations.
>
> CPS is called a 'style' because it's just that... a style of 
> programming. A program is in continuation-passing style if all of its 
> calls are tail calls.
>
> john clements