从LISP中的DEFCONSTANT获取值
有一个defcontent语句:从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))) 谢谢你的帮助!谢谢。要回答您的直接问题:
(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))