Diese Funktion sucht das Vorkommen der Elemente in der Liste und gibt dann eine Liste des Vorkommens und des Elements aus. Der zweite gibt den Modus der Liste nicht kleiner werdender Ganzzahlen aus. Dann schreibt man (make-element-freq-list '(1 1 2 2 3 4 4 5 5 5)) es druckt' ((1. 2) (2. 2) (3. 1) (4. 2) (5. 3)). Aber ich kann den Kandidaten '() und die Schleife (warum dauert es hier?) Operation hier nicht verstehen. Kann mir bitte jemand helfen, diese zu verstehen? Vielen Dank.Kandidaten- und Schleifenfunktion im Schema
#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))))))))