Как циклы For работают в схеме?

) Мне трудно понять, как циклы 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 принимает только один аргумент, а здесь, кажется, принимает два.

Любые мысли о том, что происходит. здесь?

5
задан dyoo 16 February 2012 в 16:05
поделиться