2013-04-24 57 views
-1

我正在尝试使用lisp进行score function。这个想法是我有一个列表作为输入。此列表必须进行排序,每个值应得到一个标记(最火的标记) 我尝试了类似正常排序,但我需要使用lambda运算符Lisp排序和评分

但我的lisp很糟糕。

一个示例,以明确: ((01 10 15 20)(02 10 14 20)(03 7 8 8) 输出> ((01 111)(02 3 2 1)(03 2 3 3))

它与O2第一,首先从O3排序O1的firest值,并将其排列他们

回答

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)Common Lisp中list是一个内置在创建一个列表,从它的参数功能。即使您在执行代码时将自己的软件包(默认软件包已锁定,因此您将不能在此重新定义list函数),但重新定义list等函数是非常奇怪的,因此选择另一个函数名称为您的功能

(defun sort-integer-list (lst) 
    (sort lst #'<)) 

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

+0

非常感谢您的时间和解释我。 我不明白的是如何将第一个子列表的第一个元素与第二个子列表中的第一个排序。 (我编辑了第一篇文章) – 2013-04-24 10:55:52

+0

@StereoView对不起,但我还是不明白你想要什么。 )请用更易读的形式解释问题。 P.S.我不知道“firest”这个词,字典里什么也没给我。 – JustAnotherCurious 2013-04-24 11:10:42