从LISP中的DEFCONSTANT获取值

从LISP中的DEFCONSTANT获取值,lisp,common-lisp,Lisp,Common Lisp,有一个defcontent语句: (defconstant *contant2* ’((Allan 4) (Zols 5) (Milo 2) (Judh 0))) 我想从这个常量中分离名称和与名称关联的值。我该怎么做 给出味觉分数:((name-1-score-1)…(name-n-score-n))作为一个参数,LISP函数可以生成avare分数,其他函数可以生成单词分数(9-10很好,7-8很好)。 (阿兰4)(佐尔斯5)(米洛2)(犹大0))) 谢谢你的帮助!谢谢。要回答您的直接问题:

有一个defcontent语句:

(defconstant *contant2* ’((Allan 4) (Zols 5) (Milo 2) (Judh 0)))
我想从这个常量中分离名称和与名称关联的值。我该怎么做

给出味觉分数:
((name-1-score-1)…(name-n-score-n))
作为一个参数,LISP函数可以生成avare分数,其他函数可以生成单词分数(9-10很好,7-8很好)。 (阿兰4)(佐尔斯5)(米洛2)(犹大0)))


谢谢你的帮助!谢谢。

要回答您的直接问题:

? (mapcar #'car *cookie-scores*)
(JOHN MARY MIKE JANE)
? (mapcar #'cadr *cookie-scores*)
(8 9 1 0)
循环
中,可以使用
循环
的解构:

for (name val) in
还有其他选择;这里有两个我将不加注释的所需函数的示例实现;请提出问题,或向我们展示您的代码

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

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


你有没有试过解决这个问题?请发布您的代码。在这种情况下,使用名称
first
second
比使用功能等效的
car
cadr
更为清晰。
(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))