【发布时间】:2010-10-23 09:51:32
【问题描述】:
我对一个运算符“swap-arg”感兴趣,它以 1) n 个变量的函数 f 和 2) 索引 k 作为输入,然后返回相同的函数,除了第一个和第 k 个输入变量交换。例如(用数学表示法):
(swap-arg(f,2))(x,y,z,w) = f(z,y,x,w)
现在我的第一个想法是使用rotatef实现这个,如下所示,
(defun 交换参数 (f k) (lambda (L) (f (rotatef (nth k L) (car L)))))但是,这似乎不太优雅,因为它在输入上使用了 rotatef。此外,它是 O(n),如果重复应用以重新索引所有内容,实际上可能是 O(n^2)。
这似乎是人们已经考虑过的常见问题,但我找不到任何东西。像这样交换输入的好方法是什么?有没有人们使用的标准方法?
【问题讨论】:
-
你的函数 f 不是 n 个变量。它在您的示例中作为单个参数函数调用。
-
我的设置方式我猜你是对的,它需要一个列表作为参数。有人会这样称呼它, (f (x y z w)) 我不会坚持这样称呼它,交换文字参数的东西,例如 (f x y z w) -> (f z y x w) 也会很好。
-
如果 X 是一个函数,你可以这样调用它。如果没有,你会得到一个错误。