Как насчет добавления 1
к параметру, переданному random
?до тех пор, пока введено значение >= 0
, оно будет работать нормально - полученная вами ошибка просто говорит о том, что вы не можете передать 0
в качестве параметра random
:
(define (rand d)
(random (+ d 1)))
ByКстати, randoll
выглядит не так.Почему вы проверяете, является ли случайное значение четным, просто чтобы вернуть другое случайное значение, которое мы не знаем, будет ли оно четным?И кажется, что если случайное значение равно нулю или во всех других случаях вы просто хотите вернуть 7
.Лучше попробуйте это, если оно соответствует вашим ожиданиям:
(define (randoll d)
(let ([r (rand d)]) ; call `rand` exactly once
(cond [(zero? r) 7] ; 0 is even, so check this first
[(even? r) r] ; return `r` only if it's even
[else 7]))) ; default case
Я не уверен, каков ожидаемый диапазон значений для randoll
, но мне кажется, что большую часть времени это будет простовозврат 7
.Это то, что вы хотите?