创建,显示和返回随机数

时间:2015-05-02 23:27:28

标签: scheme mit-scheme

我需要分别捕获函数numerosR的数量,因为我需要它们 知道所有数字的主要数字,次要数字和平均值,但我不知道

这是我的代码:

(clear)
(display "Ingrese un Numero entre 10 y 40: ")
(define Numero (read))

; Funcion numerosRamdon genera numeros aleatoreos entre 10 y 150
; agrupados por columnas de 10 numeros

(define (numerosRandom)
  (define contador 1)
  (define contadorColumnas 1)
  (define (ciclo)
    (define numerosR (+ (random 141) 10))
    (if (and (>= Numero 10)
             (<= Numero 40)
             (<= contadorColumnas 10))
        (if (<= contador Numero)
            (begin
              (display numerosR)
              (display #\space)
              (set! contador (+ contador 1))
              (set! contadorColumnas (+ contadorColumnas 1))
              (ciclo)))
        (begin
          (newline)
          (set! contadorColumnas 1)
          (ciclo))))
  (ciclo))

(numerosRandom)

1 个答案:

答案 0 :(得分:1)

此代码重写numerosRandom以将随机数的生成与其显示分开。它还将随机数作为列表返回。 numerosRandom的开头没有变化。

(define (numerosRandom)

  (define contador 1)

现在circlo只做一件事。它会创建一个随机数列表。现在circlo接受一个参数 - 一个用于累积随机数的列表。

  (define (circlo accumulator)
    (define numerosR (+ (random 141) 10))
    (cond 
      ((= contador Numero)
       (reverse accumulator))
      (else
       (set! contador (+ contador 1))
       (circlo (cons numerosR accumulator)))))

新的本地函数print-numerosR显示随机数。

  (define (print-numerosR numeros contadorColumnas)
    (cond ((null? numeros) "")
      ((<= contadorColumnas 10)
       (display (car numeros))
       (display #\space)       
       (print-numerosR (cdr numeros)
               (+ contadorColumnas 1)))
      (else
       (newline)
       (display (car numeros))
       (display #\space)
       (print-numerosR (cdr numeros)
               (+ contadorColumnas 1)))))

首先生成一个名为numerosR的随机数列表,然后显示,然后作为列表返回。

  (define numerosR (circlo '()))
  (print-numerosR numerosR 0)
  numerosR)

注释

由于随机数列表numerosR是由numerosRandom评估的最后一项,因此始终会返回。

通过将contador作为附加值传递给circlo来消除@classmethod def get_subclasses(cls): return set(cls.__subclasses__()) | {g for s in cls.__subclasses__() for g in s.get_subclasses()} 的变异是一个很好的练习。