2

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

像这样的东西:(blahblah sub1 '(1 1 1 1) 0.5)

我希望它以例如 0.5 的概率将 sub1 应用于每个元素。但是,我不知道该怎么做。我想我必须随机使用一些方法,但我不确定如何。帮助?

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

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

1 回答 1

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
于 2013-03-04T23:03:00.703 回答