我实际上无法理解你的问题。但如果问题是:“帮我用普通的 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)您的代码中有括号不匹配。