Мне интересен оператор swap-arg, который принимает в качестве входных данных 1) функцию f из n переменных и 2) индекс k, а затем возвращает ту же функцию, кроме первого и k-го входных данныхпеременные поменялись местами.например (в математической записи):
(swap-arg(f,2))(x,y,z,w) = f(z,y,x,w)
Теперь моя первая идея - реализовать это с помощью rotatef следующим образом:
(defun swap-args (f k)
(lambda (L) (f (rotatef (nth k L) (car L)))))
Однако это выглядит не элегантно, поскольку использует rotatef на входе,Кроме того, это O (n), и может быть O (n ^ 2) на практике, если его применять повторно для переиндексации всего.
Это похоже на общую проблему, которую люди уже рассмотрели, но я не былсмог найти что угодно.Какой хороший способ поменять входные данные, как это?Есть ли стандартный метод, которым пользуются люди?