common lisp中的list和list*区别是什么?

关于list和list*的相关链接 http://clhs.lisp.se/Body/f_list_.htm

我寻思你给出来的链接不是写了很多例子吗……

list* 等效于 (cons a (cons b (cons c (cons d (cons ..... (cons y z))))))

请问和list什么区别呢

(list 1 2 3) => (1 2 3)
(list* 1 2 3) => (1 2 . 3)

list* 不会加 nil

nil指的是.么?阐述的是形式上的区别么,功能上的区别是什么呢

老哥学过 lisp 吗?

正在学习中呢

请问文档中 list* is like list except that the last argument to list becomes the car of the last cons constructed, while the last argument to list* becomes the cdr of the last cons constructed. Hence, any given call to list* always produces one fewer conses than a call to list with the same number of arguments.具体含义是什么呢

直接写两个实现出来应该更好理解:

(defun yy-list (&rest arg)
  (if (null arg) nil
    (cons (car arg)
	  (apply 'yy-list (cdr arg)))))

(defun yy-list* (&rest arg)
  (if (null arg) (error "empty arglist")
    (if (= 1 (length arg)) (car arg)
      (cons (car arg) (apply 'yy-list* (cdr arg))))))

建议先去读 ANSI Common Lisp 捏,别从 CLHS 开始

感谢给出的代码描述,请问语义上的区别是什么呢?什么情况下只能用list*呢?

感谢上面两位小伙伴的回复,下面一个例子可挺直观说明区别

CL-USER> (list* 'a 'b 'c '(d e f))
(A B C D E F)
CL-USER> (list 'a 'b 'c '(d e f))
(A B C (D E F))

想用什么用什么,我基本上没用过这函数