在Scheme中,你如何做概率?

时间:2013-03-04 22:36:24

标签: random scheme probability

如果我有像sub1和list这样的过程,如何将概率值应用于列表的每个元素?

这样的事情:(blahblah sub1 '(1 1 1 1) 0.5)

我希望它将sub1应用于每个元素,概率为0.5。但是,我不知道该怎么做。我想我必须随意使用一些如何,但我不知道如何。帮助

这是我到目前为止所拥有的。它根本不起作用。

(define map-random
  (lambda (proc ls p)
    (map
      (lambda (x)
        (if (null? ls) '()
            (proc x (+ x (random p))))) ls)))

1 个答案:

答案 0 :(得分:3)

也许你打算写这样的东西:

(define map-random
  (lambda (proc ls p)
    (map (lambda (e)
           (if (<= (random) p)
               (proc e)
               e))
         ls)))

请注意map负责遍历输入列表并构建输出列表,您只需要负责决定如何处理每个元素 - 在这种情况下,这意味着是否应用给定的对一个元素的过程或根据随机值保留元素 - 如果该值在给定的概率范围内,则应用该过程,如果不使用相同的元素。它按预期工作:

(map-random sub1 '(1 1 1 1) 0.5)
=> '(1 1 0 1) ; a possible output