Ok Je veux compter le nombre de fois que [nombre] est apparu dans une liste en utilisant Scheme.Comment implémenter un compteur pour chaque nombre dans une liste avec Scheme?
Comment puis-je faire cela? Je voudrais aussi stocker le compteur du nombre donné et reconstruire une nouvelle liste.
Par exemple, j'ai la liste suivante ((1 2)(2 5)(5 7)(7 8)(6 8)(4 6)(3 4)(1 3)(4 8))
je pense d'abord aplatir la liste, puis définissez un compteur pour chaque numéro (ne savent pas comment le faire). Et puis reconstruire une nouvelle liste correspondant au numéro d'origine. (Cela peut être difficile? Je dois stocker une variable temporaire?)
Dites de cet exemple le numéro 1 est apparu deux fois, le numéro 2 est apparu deux fois, le numéro 3 deux fois etc ... donc je voudrais recréer une nouvelle liste à quelque chose comme ceci:
(1 2) (2 2) (3 2) (4 3) (5 2) (7 2) (6 2) (8 3)
aucune idée comment je peux y parvenir?
Mise à jour:
Je pensais à mettre en œuvre quelque chose comme un contre-incrément d'aide cela?
(define inc-counter
(let ((counter 0))
(lambda() (set! counter (+ counter 1)))))
exactement comment?new to scheme n'a jamais entendu parler d'accumulateur jusqu'à présent :( – Jonathan
Un accumulateur est juste un paramètre supplémentaire qui rassemble les résultats lorsque vous vous frayez un chemin à travers les fonctions Par exemple, vous pouvez écrire une version de la factorielle comme ceci: (define (factorial num accum) (si (= num 0) accum (factoriel (- num 1) (* accum num))) Et l'appeler avec (factoriel 10 1) .A la fin de la chaîne d'appel, la valeur de l'accumulateur serait le résultat, alors quand n = 0 nous retournons simplement cela –
La réponse d'Eli Barzilay rend WAY plus de sens que le mien, donc j'utiliserais cela et j'ignorerais complètement le mien –