私はスキームでループがどのように機能するかを理解するのが難しいです。このコードが実行されますが、特にどのようにループはSchemeで動作しますか?
(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 ((
はここで行うことになっているかを把握することができない理由を私は知らない、と最後の行に2番目でfor
発現も入れてオフビットであります - 私は通訳者がfor
が1つの議論しか取らないと不平を言いましたが、ここでは2つを取るようです。
ここで何が起こっているかについてのご意見はありますか?
多くのおかげで、私はあなたが説明したように、名前付きレットを拡張し、今私にとってははるかに理にかなっています。 –