[plt-scheme] Re: On continuations...

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sun Dec 19 20:31:58 EST 2004

Sure, if you accept accumulator-style. -- Matthias


On Dec 19, 2004, at 8:06 PM, karczma at info.unicaen.fr wrote:

>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> Matthias Felleisen writes:
>> P.S. If you come across a specification of the mathematical solution 
>> in math, could you please share with us? Most mathematicians dont 
>> really use higher-order functions much so there solution is typically 
>> much longer and I'd love to see what they do instead.
>
> Well, I present my solution, which seems slightly simpler than what
> has been proposed by Jens Axel Søgaard.
> The mathematical idea is not so mathematical after all, rather 
> structural.
> Map is useful, and fold *may* be used, but the straight recursion is
> simpler. No tables needed.
> Take *one* concrete partition of 10, say the Ferrer diagram (or, as
> physicists say, an (unfilled) Young diagram): (6,2,1,1)
> ******
> **
> *
> *
> It should be obvious that all partitions of N are: (N), and all 
> partitions
> (pkmax n (n-1)), where (pkmax n k) are all partitions restricted so 
> that the
> longest segment is equal or shorter than k.
> Now, pkmax can be decomposed into two contributions. First, with the 
> longest
> segment really equal to k, and
> all lower restricted partitions, i.e., pkmax n (k-1).
> Here you are the program in Haskell
> part n | n>0 = [n] : pkmax n (n-1)
>      | otherwise = []
> pkmax n k | n>0 && k>0 = map (k:) (pkmax (n-k) k) ++ pkmax n (k-1)
>         | n==0 = [[]]
>         | otherwise = []
> and its translation into Scheme:
> (define (part n)
> (if (> n 0) (cons (list n) (pkmax n (- n 1)))
>     ()))
> (define (pkmax n k)
> (cond ((and (> n 0) (> k 0))
>        (append (map (lambda (x) (cons k x))
>                     (pkmax (- n k) k))
>                (pkmax n (- k 1))) )
>       ((= n 0) (list ()))
>       (else ())))
> =================================
> Jerzy Karczmarczuk
>



Posted on the users mailing list.