从LISP中的DEFCONSTANT获取值

时间:2014-09-10 16:26:20

标签: lisp common-lisp

有一个不稳定的陈述:

(defconstant *contant2* ’((Allan 4) (Zols 5) (Milo 2) (Judh 0)))

我想从此常量中分离名称和与名称关联的值。我怎么能这样做?

给出口味分数:((name-1 score-1) ... (name-n score-n))作为参数,LISP功能,其中得分和其他产生单词分数(9-10是VeryGood,7-8是好)。     (defconstant contant2 '((Allan 4)(Zols 5)(Milo 2)(Judh 0)))

我感谢任何帮助!感谢。

1 个答案:

答案 0 :(得分:2)

回答你的直接问题:

? (mapcar #'car *cookie-scores*)
(JOHN MARY MIKE JANE)
? (mapcar #'cadr *cookie-scores*)
(8 9 1 0)

loop中,您可以使用loop的解构:

for (name val) in

有其他选择;这里是我将保留未注释的所需功能的2个示例实现; 提出问题或向我们展示您的代码。

(defun average-score (lst)
  (/ (reduce #'+ lst :key #'cadr) (length lst))))

? (average-score *cookie-scores*)
9/2

(defun word-scores (lst)
  (loop 
    for (name val) in lst
    collect (list name
                  (cond
                   ((> val 8) 'Excellent)
                   ((> val 6) 'Tasty)
                   ((> val 0) 'Terrible)
                   (t         'Garbage)))))

? (word-scores *cookie-scores*)
((JOHN TASTY) (MARY EXCELLENT) (MIKE TERRIBLE) (JANE GARBAGE))