-1

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

但是我的口齿不清。

一个清楚的例子: ((o1 10 15 20) (o2 5 14 20) (o3 7 8 8) output> ((o1 1 1 1) (o2 3 2 1) (o3 2 3 3))

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

4

1 回答 1

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) 通常,lisplist是一个内置函数,可以从它的参数创建一个列表。即使您在执行此代码时在自己的包中(默认包已锁定,因此您将无法在list其中重新定义函数),将此类函数重新定义为 是很奇怪的list,因此请为你的功能

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

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

于 2013-04-24T10:50:27.037 回答