Я изучаю Racket и не знаю, почему lst всегда пуст:
#lang racket
(define sort-asc-by-second
(lambda (lst)
(sort lst
(lambda (x y) (< (cdr x) (cdr y))))))
(define sum
(lambda (lst)
(apply + (map cdr lst))
)
)
(define greater-than
(lambda (lst y)
(cond ((null? lst) (void))
((>= (cdr (car lst)) y) (car lst))
(else (greater-than (cdr lst) y)))))
(define my-procedure
(lambda (lst)
(define sorted (sort-asc-by-second lst))
(define suma (sum lst))
(define probabilidades (map (lambda (p) (cons (car p) (/ (cdr p) suma))) sorted))
(define prob (random))
(car (greater-than lst prob))
)
)
(define lst '())
(do ([x 6000 (- x 1)]
(set! lst (my-procedure '((a . 1)(b . 2)(c . 3)))))
((zero? x) lst))
(display lst)
Я хочу изменить список lst внутри do, но это не так.
Знаете ли вы, почему lst пуст?
ОБНОВЛЕНИЕ Я проверил следующие инструкции со следующими результатами:
> (my-procedure '((a . 1)(b . 2)(c . 3)))
'a
> (set! lst (my-procedure '((a . 1)(b . 2)(c . 3))))
> (display lst)
'a
Я до сих пор не знаю, почему lst
пусто, когда я делаю цикл.