簡體   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