что значит & отдых в elisp? - PullRequest
       14

что значит & отдых в elisp?

19 голосов
/ 11 февраля 2011

Что означает &rest в этом: (append &rest sequences)

Я закончил книгу "elisp_intro" ,, но не нашел ответа. Буду очень признателен, если вы сможете мне помочь.

Ответы [ 3 ]

20 голосов
/ 11 февраля 2011

Указывает, что следующий аргумент является аргументом rest. В вашем примере sequences является аргументом отдыха.

В отличие от обычного аргумента, аргумент rest будет потреблять «rest» любых параметров, предоставленных пользователем. Это способ создания функции, которая принимает переменное число аргументов. Внутри тела функции аргументом будет список, содержащий все дополнительные параметры.

Таким образом, если бы у вас была функция, которая выглядела как (add &rest numbers), вы могли бы назвать ее как (add 1 2 3 4 5), а внутри функции аргумент numbers будет иметь значение (1 2 3 4 5).

Или, например, ((lambda (a &rest r) r) 1 2 3) ;=> (2 3)

10 голосов
/ 11 февраля 2011

Все аргументы, следующие за символом & rest в определении функции, будут собраны в один объект списка. Таким образом, в случае (последовательности append & rest), если вы вызываете функцию:

(append 1) 

последовательность переменных будет списком (1) в теле функции. Если вы называете это как

(append 1 2 3)

последовательность переменных будет списком (1 2 3) в теле функции. Это объясняется в Справочном руководстве Elisp, в узле списка аргументов .

(info "(elisp)Argument List")
2 голосов
/ 11 февраля 2011

elisp / Common Lisp &rest аналогичен параметру *args в Python

Если вы поместите это в свой репозиторий Common Lisp и вызовете foo с различным количеством аргументов, вы увидите, что происходит довольно быстро.

(defun foo (a b &rest trailing) 
  (format t "~a :: ~a :: ~a~%" a b trailing))
...