在Lisp中返回列表的项

在Lisp中返回列表的项,lisp,Lisp,我必须用Lisp编写一个程序,如果列表包含偶数个元素,则返回列表的第一项,如果列表包含奇数个元素,则返回最后一项。我需要一些关于从哪里开始的建议?我不需要整个程序。您可以使用获取列表的长度 然后,您可以根据谓词函数检查该数字,谓词函数根据参数是否为偶数返回T或NIL (evenp 1) ;; NIL (evenp 2) ;; T 函数first返回列表的第一个元素 (first '(a b c)) ;; A 该函数返回列表的最后一个cons,因此必须先使用打开该值 (last '(a b c

我必须用Lisp编写一个程序,如果列表包含偶数个元素,则返回列表的第一项,如果列表包含奇数个元素,则返回最后一项。我需要一些关于从哪里开始的建议?我不需要整个程序。

您可以使用获取列表的长度

然后,您可以根据谓词函数检查该数字,谓词函数根据参数是否为偶数返回
T
NIL

(evenp 1) ;; NIL
(evenp 2) ;; T
函数
first
返回列表的第一个元素

(first '(a b c)) ;; A
该函数返回列表的最后一个cons,因此必须先使用
打开该值

(last '(a b c)) ;; (C)
(first (last '(a b c))) ;; C
然后,您可以将这些组合成如下函数:

(defun get-first-if-even-length (list)
  (if (evenp (length list))
      (first list)
    (first (last list))))

此函数返回列表中的第一个或最后一个元素,具体取决于其长度是否为偶数。

谢谢!但是,如果列表中包含奇数个元素,我们如何更改程序以返回列表的最后一项呢?我编辑了答案。您可以使用
if
而不是
when
来获取“else”子句。然后,您可以使用
last
访问列表的最后一个元素。了解last的真正作用。不是你想象的那样。也要先用,不要用汽车。
(evenp 1) ;; NIL
(evenp 2) ;; T