我一直在处理一个没有任何成功的问题。在我的程序中,我定义了一个列表,让我们称之为“L”,通过移动一个几何对象,一个圆圈,多次。所以L由manu圈组成。对象圆也是一个包含其属性的列表:center(center。#V),(height.H),radius(radius.R)等。因此,属性半径是列表圈的第3个位置中的一对。如果我这样做(对象 - 属性 - 值圆'半径)= R.现在,我想要做的是创建一个新的列表,L-disorder,由与L的相同位置的圆组成,但每个都有不同的(随机)半径。然后,我试试这个:
(define L-disorder (map
(lambda(obj)
(set-cdr! (list-ref obj 3) (random:normal))
obj)
L))
我的问题是它以同样的方式改变了所有圆圈的半径!我希望所有这些都有不同的(随机)值。
我真的非常感谢任何帮助或建议!!
答案 0 :(得分:2)
如果要创建新列表,则不应使用变异函数(set-cdr!)。
(map )
函数为您做了所有的魔术:它遍历源列表,并创建新列表。
(define L-disorder
(map (lambda (circle)
; here we creating new circle
(list (car circle) (cadr circle) (random:normal)))
L))