この関数は、リスト内の要素の出現を見つけて、オカレンスと要素のリストを出力します。 2番目の引数は、非減少整数のリストのモードを出力します。あなたが書いたときに(make-element-freq-list '(1 1 2 2 3 4 4 5 5 5))それは印刷されます'((1.2)(2.2)(3.1)(4.2 )(5.3))。しかし、私はここで候補( ')とループ(なぜll?)操作を理解できません。誰も私がこれらを理解するのを助けることができますか?ありがとう。スキームの候補とループ関数
#lang racket
(define make-element-freq-list
(lambda (l)
(let loop ((l l) (candidate '()) (count 0))
(cond
((null? (cdr l)) (append candidate (list (cons (car l) (+ count 1)))))
(else
(if (equal? (car l) (cadr l))
(loop (cdr l) candidate (+ count 1))
(loop (cdr l) (append candidate (list (cons (car l) (+ count 1)))) 0)))))))
(define mode
(lambda (l)
(let loop ((l l) (max-freq (cdar l)) (mode (caar l)))
(cond
((null? l) mode)
(else
(if (> max-freq (cdar l))
(loop (cdr l) max-freq mode)
(loop (cdr l) (cdar l) (caar l))))))))