我遇到了一个问题:该函数必须随机返回列表中的一个元素(即汽车),而cdr将是获取该元素汽车的相对频率。
(define (get-randomly ls)
(list-ref ls (random (length ls))))
(define three-elements (list (cons 'a 1)(cons 'b 2)(cons 'c 3)))
(get-randomly three-elements)
我随机都是错误的,所以它不会根据相对频率返回任何随机元素。我需要有关如何修复它的建议。
答案 0 :(得分:0)
因此,get-randomly
对所有元素使用1
的权重,因为您没有使用权重。
因此,为了做到这一点,你需要知道权重的总和。所以你应该做一个帮手,以便:
(sum-weight '((a . 1) (b . 2) (c . 3)))
; ==> 6
然后,您使用(random 6)
获取0
和5
之间的数字。现在你可以随意迭代你的列表总和权重,这样当你超过你得到的数字时,就是获胜的符号。
举个例子,假设你得到4
。迭代时,您a
1
,b
3
和c
6
。 c
那就是。如果您从随机中获得2
则为b
。