Вопрос: Можно ли написать общую функцию Lisp, которая принимает те же аргументы как по положению, так и по ключевому слову? Если да, то как?Общие функции Lisp, которые принимают аргументы либо по положению, либо по ключевому слову?
Например, как можно было переписать следующую функцию:
(defun fnx (&key a b c)
(list a b c))
Такой, что можно законно назвать его в каждом из следующих способов:
(fnx 1 2 3)
(fnx :a 1 :b 2 :c 3)
(fnx 1 2 :c 3)
Семантика не ясна. Что такое ': a: b'? Это один аргумент или два аргумента? Вы всегда можете использовать список аргументов '& rest' и самостоятельно разбирать его. Вообще-то я бы видел такие гибкие списки аргументов как плохой стиль, поскольку он делает ошибки более вероятными. Также обратите внимание, что в Common Lisp ключи необязательно должны быть ключевыми. Могут использоваться и обычные символы. –
Невозможно. – Xach