不客气!我在代码中添加了一些注释,以帮助您理解它:
- [color=blue];initiate a new, empty list to store result sets (key + sum)[/color]
- (setq listTemp '())
- [color=blue];parse the items of input list (pairs of key and value)[/color]
- (foreach subList '((40 . 3.0) (40 . 4.0) (50 . 1.0) (50 . 3.0) (65 . 3.0) (65 . 5.0) (80 . 3.0) (80 . 10.0) (100 . 10.0) (100 . 6.0) (100 . 5.0))
- [color=blue] ;test if an element with current key was already treated (is stored in results list)[/color]
- (if (setq listExists (assoc (setq idList (car subList)) listTemp))
- [color=blue] ;if yes, then summate current value to stored sum and replace the existing set (key + sum)[/color]
- (setq listTemp (subst (cons idList (+ (cdr listExists) (cdr subList)))
- listExists
- listTemp))
- [color=blue] ;if not, then create a new set (key + sum) in results list[/color]
- (setq listTemp (append listTemp
- (list subList)))
- )
- )
|