使用

时间:2016-12-29 14:37:33

标签: racket

我遇到了一个问题:该函数必须随机返回列表中的一个元素(即汽车),而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)

我随机都是错误的,所以它不会根据相对频率返回任何随机元素。我需要有关如何修复它的建议。

1 个答案:

答案 0 :(得分:0)

因此,get-randomly对所有元素使用1的权重,因为您没有使用权重。

因此,为了做到这一点,你需要知道权重的总和。所以你应该做一个帮手,以便:

(sum-weight '((a . 1) (b . 2) (c . 3))) 
; ==> 6

然后,您使用(random 6)获取05之间的数字。现在你可以随意迭代你的列表总和权重,这样当你超过你得到的数字时,就是获胜的符号。

举个例子,假设你得到4。迭代时,您a 1b 3c 6c那就是。如果您从随机中获得2则为b

相关问题