2013-05-04 3 views
0

0과 1 사이의 실수가 주어졌습니다. 이것은 niceness-factor입니다. 이 요인은 일종의 확률입니다. 나는 그것이 0.2이면, 1/5의 확률로 어떤 것이 일어날 것임을 의미합니다. 임의의 프로 시저가 체계에서 정확한 정수를 원합니다.

나는 이것에 대한

random 

절차를 사용하려고 노력했다.

(if (eq? 'c (tit-for-tat my-history other-history)) 
    'c 
    (if (= (random (/ 1 niceness-factor)) 0) 'c 'd)) 

은 "임의"절차가 저를 원하지만이 정확한 정수를주고 : 여기 내 코드 조각이다. 이 문제를 어떻게 해결할 수 있습니까? 랜덤과 비슷한 절차가 있습니까? 사전에

감사합니다 ...이 문제를 해결하는

답변

1

niceness-factor을 정수형 값 (random의 결과와 비슷한 값)으로 변환하면됩니다. 예를 들어 모듈 라켓, 라켓 /베이스 (random k)에서

(if (eq? 'c (tit-for-tat my-history other-history)) 
    'c 
    (if (> (random 100) (* 100 niceness-factor)) 
     'c 
     'd))) 
+0

niceness-factor를 "정수처럼"변환해야 할 필요가 있는지 물어볼 것입니다. 대신 간단히 '(> (임의의) niceness-factor)'를 수행 할 수 있습니다. –

+0

내가 잘 알고있는 Scheme'random'은 0과'limit' 사이의 정수를 반환합니다. 동의하는 바에 따르면, 어떤 것은 0과 1 사이의 실수를 반환 할 수 있습니다.'random'은 어떤 RnRS의 일부분으로 정의되지 않습니다. – GoZoner

+0

OP에 라켓이 붙어 있습니다. 라켓 언어는'(무작위 한계)'를 정의하여 정수 0..limit를 반환합니다. 그리고 0과 1 사이의 배타적 부정합을 반환하는'(random) '. 참조 링크에 대한 내 대답을 참조하십시오. (IMO 질문은 R6RS 또는 R5RS 언어를 사용하지 않는 한 라켓 태그와 스킴 태그를 모두 가져서는 안됩니다. 라켓 언어는 스킴에서 진화되었지만 스킴이 아닙니다.) –

0

한 가지 방법은, 사용하는 것입니다 (임의 1). 이제 결과가 < = niceness-factor이면 "무언가"를 수행하고 "무효"를 수행하십시오.

근거 :

포함 (0,1)의 범위의 숫자 < = 0.2를 얻을 확률은 20 %가된다.

+0

나는 당신이 무엇을 의미하는지 이해하지 못했습니다. – user2870

+0

@GoZoner는 기본적으로 내가 말한 것을 기반으로 코드 스 니펫을 만들었습니다. "무언가"는 "c"이고 "아무것도"는 당신의 모범을 보지 않았습니다. 말이된다? –

+0

OK 덕분에 지금은 분명해졌습니다 – user2870

0

는 K-1을 포함하는 0의 정수를 생성한다. (k는 1과 4294967087 사이에 있어야 함) (random은 0과 1 사이의 정확하지 않은 수를 제공합니다. 당신은 당신이 시작한 일에 가장 가까운 것 exact-round에 전화를 추가 시작한 곳에서 당신은 다른 언어 중 하나를 라켓을 사용하고 있지 않습니다 가정 reference guide: random provided by racket and racket/base

는 지원을 라켓 :

(if (eq? 'c (tit-for-tat my-history other-history)) 
    'c 
    (if (= (random (exact-round (/ 1 niceness-factor))) 0) 'c 'd)) 

그러나 나는 발견 다음은 더 간단 할 것입니다 :

(if (eq? 'c (tit-for-tat my-history other-history)) 
    'c 
    (if (<= (random) niceness-factor) 'c 'd)) 
관련 문제