Matthew and Richard, Thanks a lot! Defining the encoding schemes as functions solves my problem.
Richard, thank you for showing me a solution in the context of the function I have already built and Matthew, thank you for showing me solutions using map and for/list. I have learned a lot from your answers. Best, Rian On Fri, Dec 20, 2013 at 1:52 AM, Richard Cleis <rcl...@me.com> wrote: > You might want your encoding-scheme to be a function, > and you want to evaluate that function inside generate-chromosome: > > (define (generate-chromosome encoding-scheme number-of-genes) > (cond [(zero? number-of-genes) empty] > [else (cons (encoding-scheme) > (generate-chromosome encoding-scheme (sub1 > number-of-genes)))])) > > (define (binary-encoding-scheme) > (random 2)) > (define (value-encoding-scheme) > (random)) > > (generate-chromosome binary-encoding-scheme 10) > (generate-chromosome value-encoding-scheme 10) > > (0 1 1 1 1 1 0 1 1 0) > (0.17586764776624525 > 0.13437314563189037 > 0.585523111696543 > 0.6533766686688987 > 0.09071850144989983 > 0.8804515074319006 > 0.6998388642832832 > 0.599233672637633 > 0.5238661544779689 > 0.72734166222789) > > > > > rac > > > > On Dec 19, 2013, at 7:42 PM, Rian Shams wrote: > > Hello All, > > I am new to Racket and just started building an evolutionary computing > module to supplement my research and learn more about Racket. > > When it comes to representing a chromosome, there are many encoding > schemes one can choose from. To start I would like to build a function that > lets the user choose the encoding scheme they would like by being able to > directly insert it into the function call. So far I have created this: > > (define (generate-chromosome encoding-scheme number-of-genes) > (cond [(zero? number-of-genes) empty] > [else (cons encoding-scheme > (generate-chromosome encoding-scheme (sub1 > number-of-genes)))])) > > Two popular encoding schemes are the binary encoding scheme and the real > value encoding scheme: > > (define binary-encoding-scheme > (random 2)) > (define value-encoding-scheme > (random)) > > So then calling this function using the binary encoding scheme: > > (generate-chromosome binary-encoding-scheme 10) > > gives either a list of only ten 1's or a list of only ten 0's. Random only > works once and whatever the first random value is stays and doesn't change. > > *How would I make random re-evaluate each time given that I want it to be > included in the definition of an encoding scheme?* > > As an alternate, the function below works when I directly include (random > 2) in for a value in the encoding scheme, but I prefer the structure of the > above function. > > (define (generate-chromosome-2 number-of-genes) > (cond [(zero? number-of-genes) empty] > [else (cons (random 2) ;binary-encoding-scheme > (generate-chromosome-2 (sub1 > number-of-genes)))])) > > So the function call > (generate-chromosome-2 10) gives the desired result, but doesn't fit the > needed structure. > > Any help would be much appreciated. > > Best Regards, > -- > Rian Shams > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > > > -- Rian Shams
____________________ Racket Users list: http://lists.racket-lang.org/users