pythonのlambda
n%で「当たり」とした時に当たりまで何回失敗したかを計測するlambda関数を作ってみる。
lambda.py
from random import random as r
count = lambda i : (lambda i, f: f(i, 1, f))(i, lambda i, c, f: f(i, c+1, f) if r() > i else c)
print(count(0.1)) # 10%が成功するまでの回数
解説
i = %を数値表記したもの
c = 成功するまでのカウンタ
f = 再帰関数
横に長いので分割
t1.py
lambda i : (lambda i, f: f(i, 1, f)) #A(関数)
(i, lambda i, c, f: f(i, c+1, f) if r() > i else c) #B(引数)
- count(n)で呼び出した際にAの引数iへnが渡される。
- Bの第一引数が1.から受け取ったiが渡される。
- Bの第二引数が再帰関数としてfに渡される。
- この2つの引数をAの中にあるlambdaへ渡す。
- Aの中のlambdaは2.と3.の引数を受け取り再帰関数を実行する。
- rand()がnを下回るまでcを加算しながら繰り返す。
みたいな感じだと思う。
数学は苦手だから本当に10%までに失敗した計測できてるかはあんまわからない。ごめんなさい。