Мне трудно понять, как работают циклы в схеме.В частности, этот код выполняется, но я не знаю, почему
(define (bubblesort alist)
;; this is straightforward
(define (swap-pass alist)
(if (eq? (length alist) 1)
alist
(let ((fst (car alist)) (scnd (cadr alist)) (rest (cddr alist)))
(if (> fst scnd)
(cons scnd (swap-pass (cons fst rest)))
(cons fst (swap-pass (cons scnd rest)))))))
; this is mysterious--what does the 'for' in the next line do?
(let for ((times (length alist))
(val alist))
(if (> times 1)
(for (- times 1) (swap-pass val))
(swap-pass val))))
Я не могу понять, что здесь должен делать (let for ((
, и выражение for
от второй до последней строкиЭто также немного отстраняет - у меня была претензия переводчика, что for
принимает только один аргумент, но здесь он, кажется, принимает два.
Есть мысли о том, что здесь происходит?