List Lisp排序和评分

List Lisp排序和评分,list,sorting,lisp,List,Sorting,Lisp,我正在尝试使用lisp制作一个评分函数。我的想法是我有一个列表作为输入。必须对该列表进行排序,每个值都应有一个标记(最火的一个标记最高) 我尝试了类似于普通排序的方法,但我需要使用lambda运算符 但是我的口齿不清很糟糕 举例说明: ((O110520)(O51420)(O3788) 输出> ((o1)(o2 2 1)(o3 2 3)) 它将o1中的firest值与o2中的first值和o3中的first值进行排序,并对它们进行排序。我实际上无法理解您的问题。但如果问题是:“帮助我用commo

我正在尝试使用lisp制作一个
评分函数
。我的想法是我有一个列表作为输入。必须对该列表进行排序,每个值都应有一个标记(最火的一个标记最高) 我尝试了类似于普通排序的方法,但我需要使用lambda运算符

但是我的口齿不清很糟糕

举例说明: ((O110520)(O51420)(O3788) 输出> ((o1)(o2 2 1)(o3 2 3))


它将o1中的firest值与o2中的first值和o3中的first值进行排序,并对它们进行排序。

我实际上无法理解您的问题。但如果问题是:“帮助我用common 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) 在common lisp中,list是一个内置函数,可根据其参数创建列表。即使在执行此代码时您在自己的程序包中(默认程序包已锁定,因此您将无法在此处重新定义
列表
函数),将此类函数重新定义为
列表
也是非常奇怪的,因此请为您的函数选择另一个名称

(defun sort-integer-list (lst)
  (sort lst #'<))
(定义排序整数列表(lst)

(sort lst#'非常感谢您的时间和解释。我不明白的是如何将第一个子列表的第一个元素与第二个子列表的第一个元素进行排序。(我编辑了第一篇文章)@StereoView抱歉,但我仍然不明白您想要什么。)请以更可读的形式解释这个问题。另外,我不知道“firest”这个词字典什么也没给我。