假设我有一个带有嵌套列表的列表以及一个“ NOT”和“ OR”的函数,如下所示:
def or_function(exp1, exp2):
return exp1 or exp2
def not_function(exp):
return not exp
my_list = ["NOT", ["NOT", ["NOT", [False, "OR", ["NOT", False]]]]]
如何首先执行最里面的列表(["NOT", False]
),然后再执行第二个最里面的列表([False, "OR", ["NOT", False]]
)等,以便最后返回False
?我知道双重递归可能在这里有用,但我不知道如何实现。
答案 0 :(得分:1)
您可以执行以下操作:
def evaluate(exp):
if isinstance(exp, bool): # base case: atomic bools
return exp
# ["NOT", whatever]
if len(exp) == 2 and exp[0] == "NOT":
# evaluate whatever and negate it!
return not_function(evaluate(exp[1]))
if len(exp) == 3 and exp[1] == "OR":
return or_function(evaluate(exp[0]), evaluate(exp[2]))
raise ValueError('unknown structure')
>>> my_list = ["NOT", ["NOT", ["NOT", [False, "OR", ["NOT", False]]]]]
>>> evaluate(my_list)
False
答案 1 :(得分:0)
如果您确信只会以这种方式获得输入,则可以尝试反转列表
my_list = reverse(my_list)
这将确保始终将最里面的列表["NOT", False]
首先运行,并且始终将其始终放在列表的末尾