Common Lispで負のランダム整数を取得するにはどうすればよいですか?標準ライブラリにいくつかの関数はありますか?
---- 2012/06/15に更新----おそらく、質問を正しく記述していませんでした。私が実際に欲しいのは、nと-nの間のランダムな整数を取得することです。
Common Lispで負のランダム整数を取得するにはどうすればよいですか?標準ライブラリにいくつかの関数はありますか?
---- 2012/06/15に更新----おそらく、質問を正しく記述していませんでした。私が実際に欲しいのは、nと-nの間のランダムな整数を取得することです。
否定を直接適用します。
(- (random x))
改訂された質問の編集。これは、一般的なlispのことではなく、一般的なプログラミングのことです。
(defun random-n (n)
(- (random (1+ (* 2 n))) n))
CLHSで読んrandom
でください。
-n
からまでの乱数が必要な場合n
:
2n+1
ランダムは0からn(nを除く)であるためである必要があります(defun my-random (n)
(- (random (1+ (* 2 n))) n))
ここにはすでに良い答えがあるので、もう1つ面白い答えを追加します(また、正解よりもさらに効率的かもしれません!)
(boole boole-c1 (random (1- n)) 0)
あなたが求めるものをあなたに提供します!
ご想像のとおり、(- -1 (random n))
は、-nから-1までのランダムな整数を(ほぼ)均一な確率で提供します。ここで、nは任意の整数です。