Lisp排序和评分

时间:2013-04-24 10:22:32

标签: list sorting lisp

我正在尝试使用lisp创建score function。我的想法是我有一个列表作为输入。必须对此列表进行排序,并且每个值都应得到一个标记(最火的标记具有最高标记) 我尝试了类似普通排序的东西,但我需要使用lambda运算符

但是我的口齿不好。

说明一个例子:     ((o1 10 15 20)(o2 5 14 20)(o3 7 8 8) 输出>     ((o1 1 1 1)(o2 3 2 1)(o3 2 3 3))

它首先从o2排序o1的最火值,然后从o3排序,然后对它们进行排序。

1 个答案:

答案 0 :(得分:0)

我实际上无法理解你的问题。但如果问题是:“帮我按常见的lisp排序列表”,那么:

1)`(setq o1(20 30 15))是一个有效的lisp表达式,(20 30 15)是一个列表,但它没有引用,因此解释器将尝试计算表达式。而评估规则是“表达式中的第一个元素是一个函数”,因此解释器将尝试评估名称为“20”且将失败的函数。你应该这样写:

(setq o1 '(20 30 15))

1')通常最好使用setf而不是setq(特别是如果你不想知道差异)。并且在为其设置值之前定义变量也更好。所以写这样的东西会更好:

(defparameter o1 '()) ;creating o1 with empty list
(setf o1 '(20 30 15))

1'')您应该使用可理解的名称命名变量和函数。如果是全局变量,则用星号标记。例如

(defparameter *students-scores* '())
(setf *students-scores* '(20 30 15))

2)通常,lisp list是一个内置函数,可以根据它的参数创建一个列表。即使您在执行此代码时处于自己的程序包中(默认程序包已锁定,因此您无法在其中重新定义list函数),重新定义此类函数({ {1}},因此请为您的功能选择其他名称

list

3)您的代码中的括号不匹配。