0
votes

Comment puis-je faire ma queue de fonction moyenne récursive dans lisp

J'essaie simplement de rendre cette fonction moyenne pour être récursive de la queue. J'ai réussi à faire fonctionner ma fonction et qui a pris des efforts considérables. Ensuite, je suis allé demander à mon professeur si mon travail était satisfaisant et il m'a informé que

  1. ma fonction AVG n'était pas de la queue récursive
  2. AVG n'a pas produit la sortie correcte pour les listes avec plus d'un élément

    J'ai joué avec ce code depuis 2 heures et j'ai frappé un peu un mur. Quelqu'un peut-il m'aider à identifier ce que je ne comprends pas ici.

    a parlé à mon professeur, il était! = utile xxx

    Mes résultats attendus de mon test sont commentés juste après le 39/5 < / p>


2 commentaires

Ne pas nid défun -s; Ils sont censés être une construction de définition de haut niveau. Le nom Sumup est entré dans l'environnement global malgré l'imbrication de la nidification. Les fonctions locales sont créées à l'aide de FLET ou étiquettes .


oui c'était l'autre note que mon professeur m'a donné de ne pas utiliser de défunger dans une autre fonction


3 Réponses :


1
votes

Voici ce que j'ai maintenant xxx


1 commentaires

L'indentation a l'air étrange



0
votes
(defun avg (list &optional (sum 0) (n 0))
   (if list
       (avg (cdr list) 
            (+ sum (car list)) 
            (+ 1 n))
       (/ sum n)))

0 commentaires

0
votes
(defun avg (lst)
   (if (null lst)
       0
       (labels ((find-avg (lst sum len)
          (if (null lst)
              (/ sum len)
              (find-avg (cdr lst) (incf sum (car lst)) len))))
          (find-avg lst 0 (length lst))))

0 commentaires