0

こんにちは皆さん、ネストされたリストの平均を見つけるためのソリューションを実装しました。それで、私の歓声でより良い解決策や考えられるエラーを考えてもらえないかと思っていました.

; takes a nested list and return a flattened list
(defun flatten-list (list)
  (cond 
     ((null list) list)  
     ((atom list) (list list))  
     ((list (first list))
            (append (flatten-list (first list))
                    (flatten-list (rest  list)))) 

   (t      
            (append (list (first list))
                          (flatten-list (rest  list))))
   ))

;takes a flattened list and return the sum of the numbers
(defun sum-list (list)
  (cond ((null list)
         0)    
        (t
         (+ (first list) (sum-list(rest list))))
        ))

;uses the flatten-list and nested-average to find the average
(defun nested-average (list)  
  (sum-list  (flatten-list list))
  (defvar flat-lis)
  (setf flat-list (flatten-list list))
  (/ (sum-list  flat-list) (length flat-list)
  ))
4

2 に答える 2

1

これがより良い解決策だと思います...

(defun tree-average (tree)
  (labels ((%tree-average
            (branch sum visited)
            (cond
             ((consp branch)
              (multiple-value-call
               #'%tree-average (cdr branch)
               (%tree-average (car branch) sum visited)))
             ((numberp branch)
              (values (+ sum branch) (1+ visited)))
             (t (values sum visited)))))
    (multiple-value-call #'/ (%tree-average tree 0 0))))

さて、あなたが尋ねれば。

于 2012-11-04T09:36:24.357 に答える
1

最初の関数には、到達不能なコードが含まれています。そのコードは決して使用されません。ドキュメント文字列も、関数が何をするかを実際に説明していないため、間違っています。

2 番目の関数は、 を使用して記述した方が適切ですREDUCE

3 番目の関数は書き直す必要があります。最初の形式の値は使用されません。DEFVARand の使い方SETFは間違っています。

于 2012-11-03T19:27:39.753 に答える