使用 defalias 或新功能创建 Lisp 别名?
Creating a Lisp alias with defalias or new function?
我希望 mylist
具有与 list
相同的功能。在大多数 Lisp 中(我在 Emacs Lisp 上)我可以简单地写
(defalias 'mylist 'list)
但是如果我想自己写我可以写
(defun mylist (&rest x)
(car (list x)))
具有相同的功能。但后来我通过实验得到了这个。首先,我有这个代码
(defun mylist (&rest x)
(list x))
其中产生了一个列表中的一个列表。我不确定为什么,但简单的解决方案是将 (list x)
放在 car
中并称其为好。但是我想知道为什么当我不使用 car
技巧时我会在列表中得到一个列表。我错过了什么?
But if I want to write my own I can write
(defun mylist (&rest x)
(car (list x)))
但是为什么呢?
3 -> 3
(list 3) -> (3)
(car (list 3)) -> 3
所以 (car (list arg))
是 arg
上的空操作。
因此它只是:
(defun mylist (&rest x)
x)
But I'd like to know why I get a list inside a list when I don't use the car trick. What am I missing?
如果你有一个列表
x -> (1 2 3)
并在其上调用 list
(list x) -> ((1 2 3))
然后你得到一个列表中的列表。
在列表中调用 car
也不是 技巧。它返回该列表的第一个元素:
(car (list x)) -> (1 2 3)
(defun my-list (&rest x) …
&rest
参数意味着所有剩余的参数都被放入一个绑定到这个参数的列表中。 X
然后保存您想要的列表。大功告成。
(defun my-list (&rest x)
x)
我希望 mylist
具有与 list
相同的功能。在大多数 Lisp 中(我在 Emacs Lisp 上)我可以简单地写
(defalias 'mylist 'list)
但是如果我想自己写我可以写
(defun mylist (&rest x)
(car (list x)))
具有相同的功能。但后来我通过实验得到了这个。首先,我有这个代码
(defun mylist (&rest x)
(list x))
其中产生了一个列表中的一个列表。我不确定为什么,但简单的解决方案是将 (list x)
放在 car
中并称其为好。但是我想知道为什么当我不使用 car
技巧时我会在列表中得到一个列表。我错过了什么?
But if I want to write my own I can write
(defun mylist (&rest x) (car (list x)))
但是为什么呢?
3 -> 3
(list 3) -> (3)
(car (list 3)) -> 3
所以 (car (list arg))
是 arg
上的空操作。
因此它只是:
(defun mylist (&rest x)
x)
But I'd like to know why I get a list inside a list when I don't use the car trick. What am I missing?
如果你有一个列表
x -> (1 2 3)
并在其上调用 list
(list x) -> ((1 2 3))
然后你得到一个列表中的列表。
在列表中调用 car
也不是 技巧。它返回该列表的第一个元素:
(car (list x)) -> (1 2 3)
(defun my-list (&rest x) …
&rest
参数意味着所有剩余的参数都被放入一个绑定到这个参数的列表中。 X
然后保存您想要的列表。大功告成。
(defun my-list (&rest x)
x)