) Мне трудно понять, как циклы for работают в схеме. в частности, выполняется этот код, но я не знаю, почему
(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
принимает только один аргумент, а здесь, кажется, принимает два.
Любые мысли о том, что происходит. здесь?