このヨセフス問題の実装のどこが不十分なのですか? ジョセフス問題に慣れていない人のために説明すると、目標は循環リンク リストから 3 つおきのエントリを 1 つだけになるまで削除することです。この例では、すべての「mth」値を削除しています。
(define (joseph lst)
(let ((m (+ 1 (random (length lst)))))
(define (joseph-h i xlst mlst)
(cond ((<= (length xlst) 1) xlst)
((null? (cdr mlst))
(joseph-h i xlst xlst))
((= i m)
(joseph-h 1 (delete (car mlst) xlst) (cdr mlst)))
(else
(joseph-h (+ i 1) xlst (cdr mlst)))))
(joseph-h 0 lst lst)))
(joseph (list 1 2 3 4 5 6 7))
(define (delete v lst)
(cond ((= v (car lst))
(cdr lst))
(else
(cons (car lst) (delete v (cdr lst))))))
私はいつも、リストの最後の番号を答えにしています。私はこれが正しくないことを知っています。