如果我有像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)))
答案 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