2011-05-10 58 views
0

我一直在处理多天,但没有任何成功。在我的程序中,我定义了一个列表,我们称之为“L”,通过多次移动一个单一的几何对象,一个圆圈。所以L由manu圈组成。对象圆也是一个包含其属性的列表:center(center。#V),(height。H),radius(radius。R)等等。因此,属性半径在列表圈的第三位是一对。如果我这样做(对象属性值圆的半径)= R现在,我想要做的是创建一个新的列表,L-disorder,由与L的位置相同的圆圈组成,但每个圆圈都有不同的随机)半径。然后,我试试这个:更改方案中的对象属性值

(define L-disorder (map 
        (lambda(obj) 
         (set-cdr! (list-ref obj 3) (random:normal)) 
        obj) 
        L)) 

我的问题是它以相同的方式改变了所有圆的半径!我想为它们提供一个不同的(随机)值。

我真的很感谢任何帮助或建议!

回答

2

如果你想创建新的列表,你不应该使用突变functons(set-cdr!)。 (map)函数为你做了所有的魔术:它遍历源列表,并创建新的列表。

(define L-disorder 
    (map (lambda (circle) 
     ; here we creating new circle 
     (list (car circle) (cadr circle) (random:normal))) 
    L)) 
+0

非常感谢Paul的快速回答!我已经尝试过,但它的工作原理是,然后我得到一个新的圆圈((center.V),(height.H),random number)),而不是旧的((center。#V),height ),(Radius.R))。我会看看如何处理。再次感谢! – Peter 2011-05-10 15:20:03

+0

看看(随机:正常)功能。它应该评估为(Radius。R)。 无论如何,最好使用构造函数,如 (circle v h r),其中圈数为 – paul 2011-05-10 15:34:26

+0

我知道了。那非同寻常!非常感谢! – Peter 2011-05-10 17:08:28