2013-04-08 80 views
0

假設我有這樣的:遞歸布爾評價

[(True, False, False), True] = True 

(False, [True, True, False], False) = False 

,可能是無限深和元組評價爲手術室,並列出與運算

這個功能怎麼可能用python寫的?

+2

遞歸短路穿越功能。你有嘗試過什麼嗎? – 2013-04-08 16:58:10

+1

如果我理解正確,你想寫'X&Y'爲'[X,Y]','X | Y'爲'(X,Y)'。那(依靠類型進行評估)並不是一種Pythonic的做事方式。 – bereal 2013-04-08 17:00:13

回答

1

allany A液:

def evaluate_bool(expr): 
    if isinstance(expr, list): 
     return all(evaluate_bool(e) for e in expr) 
    elif isinstance(expr, tuple): 
     return any(evaluate_bool(e) for e in expr) 
    else: 
     return expr 

evaluate_bool([(True, False, False), True]) # True 
evaluate_bool((False, [True, True, False], False)) # False 
+1

'map'渴望Python 2.x - 通過使用'itertools.imap'或一個生成器表達式'evaluate_bool(e)for e in expr',您可以保持這種懶惰。 (在Python 3.x中'map'已經很懶。) – 2013-04-08 17:05:33

+0

@FrancisAvila你說得對,這個代碼可以通過使用生成器表達式來改進。謝謝! – 2013-04-08 17:10:37