元编程组合数学



我有兴趣创建一个python函数,它接受2*n个参数,其中n可以是变量。将前n个自变量与后n个自变量进行比较。

本质上,例如,如果n=2,函数f(a1,a2,b1,b2(将检查(a1==b1和a2=b2(或(a1=b2和a2=b1(。对于n=3,函数f(a1,a2,a3,b1,b2,b3(将检查(a1==b1和a2=b2和a3=b3(或(a1=b2和a2=b3和a3=b1(或(a1=b3,a2=b1和a3=b2(

然而,我希望函数根据n的值动态构建条件语句。

这可能是一个很高的要求,我可以自己做研究,但有人能为我指明正确的方向吗?这会被认为是元编程,对吧?有人知道为这类事情而存在的图书馆吗?

谢谢,

-AA

def f(*args):
l = len(args)
assert l % 2 == 0
return args[:l / 2] == args[l / 2:] or args[:l / 2] == args[l:l / 2 - 1:-1]

assert f(True, True)
assert not f(True, False)
assert f(True, False, True, False)
assert f(True, False, False, True)
assert not f(True, False, True, True)
assert f(1, 1)
assert not f(1, 2)
assert f(1, 2, 1, 2)
assert f(1, 2, 2, 1)
assert not f(1, 2, 0, 1)
assert not f(1, 2, 1, 0)
assert f(1, 2, 3, 1, 2, 3)
assert f(1, 2, 3, 3, 2, 1)
assert not f(1, 2, 3, 1, 2, 0)
assert not f(1, 2, 3, 0, 2, 1)

Edit:由于您现在指定了Python,因此将其视为未来询问者的额外起点。

你可以从一些可变模板开始你的研究:

template<typename... Args>
void foo(Args&&... args) {
static_assert(sizeof...(args) % 2 == 0, "Need 2*n parameters for some n");
// Condition using array + parameter pack expansion.
}

相关内容

  • 没有找到相关文章

最新更新