> 1 <

Автор Сообщение

NelliClass

Members


Статус

3 сообщений

Где: Russia
Род занятий:
Возраст:

#6091   2012-05-03 15:25 GMT+3 часа(ов)      
Приведите примеры функций, имеющих строго определенное и варьируемое количество аргументов?

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#6097   2012-05-04 22:52 GMT+3 часа(ов)      
Это короткая методичка, которую я себе писал
;параметр OPTIONAL - переменное число параметров.
(defun foo (a b &OPTIONAL (c 10)) (list a b c))
;вызов
> (foo 1 2 3)
(1 2 3)
> (foo 1 2)
(1 2 10)
> (foo 1)
error
;если не указано значение по умолчанию, тогда замена на NIL
(defun foo (a &OPTIONAL b (c 10)) (list a b c))
;вызов
> (foo 1 2 3)
(1 2 3)
> (foo 1 2)
(1 2 10)
> (foo 1)
(1 NIL 10)
;зависимость от другой переменной
(defun make-rectangle (h &OPTIONAL (w h)) (* w h))
;вызов
> (make-rectangle 10)
100
> (make-rectangle 10 12)
> 120
;возможно добавление некоторого параметра, который переходит в NIL,
;если аргумент не задан, и T, если аргумент был задан
(defun foo (a b &OPTIONAL (c 3 c-supplied-p) (list a b c c-supplied-p))
;вызов
> (foo 1 2)
(1 2 3 NIL)
> (foo 1 2 3)
(1 2 3 T)
> (foo 1 2 4)
(1 2 4 T)
;параметр REST
;используется при создании функций с переменным числом параметров
;Переменные, описанные как REST передаются в виде списка
;параметр KEY
;используются, когда при перегрузке функции необходимо указать порядок определённых переменных
(defun foo (&KEY a b c) (list a b c))
;вызов
> (foo)
(NIL NIL NIL)
> (foo :a 1)
(1 NIL NIL)
> (foo :b 1)
(NIL 1 NIL)
> (foo :c 1)
(NIL NIL 1)
> (foo :a 1 :c 1)
(1 NIL 1)
> (foo :b 1 :c 1)
(NIL 1 1)
;можно так же смешивать с c-supplied и default переменными
I wish I'd made you angry earlier
> 1 <


Онлайн :

0 пользователь(ей), 37 гость(ей) :