繁体   English   中英

元编程组合

[英]Metaprogramming combinatorics

我对创建一个接受2 * n参数的python函数感兴趣,其中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)

编辑:由于您现在指定了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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM