Как создать список из n приложений процедуры - PullRequest
0 голосов
/ 03 января 2019

Мой вопрос связан с этим , но в моем случае я хотел бы получить список с результатами n применений функции, выходные данные которой не могут быть снова вычислены с предыдущим результатом (случайным образом выбираяэлемент из списка, например).

То есть это не состав функции n раз с самим собой, но n результатов показаны вместе в списке.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы можете использовать for/list следующим образом:

(define (times/list proc n)
  (for/list ([i n]) (proc)))

Используя его:

> (times/list (λ () (random 5)) 10)
'(3 4 3 3 0 0 4 0 2 1)
0 голосов
/ 03 января 2019

Как то так?

#!racket/base
(require srfi/1)

(define (times/list proc n)
  (unfold-right zero? proc sub1 n))

(times/list (lambda (v) (abs (- v 5))) 10)
; ==> (4 3 2 1 0 1 2 3 4 5)

(times/list (lambda _ 5) 10)
; ==> (5 5 5 5 5 5 5 5 5 5)

(times/list (lambda _ (+ 1 (random 5))) 10)
; ==> (4 2 2 4 4 1 5 3 1 3) (varies)
...