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 に答える