def explore_frontier(sig, data_type, metric, max_size):
# closure for binding sig and rules easily
expand = producers.generate_expander(sig)
# generate appropriate starting node based on type
start_node = producers.e.Un(producers.parse_type(data_type))
frontier = [(metric(start_node), start_node)]
# go hog wild
while True:
# pull expression off heap, check expansions
m, expr = heapq.heappop(frontier)
expansions = expand(expr)
# if there are expansions, just add them back in
if expansions:
for new_expr in expansions:
heapq.heappush(frontier, (metric(new_expr), new_expr) )
# if there aren't any expansions and the program is closed, we're done
elif len(expr._values_from_kind("un")) == 0:
yield m[0], expr
#------------------------------------------------------------------------------
# now we treat this module as a script - time to execute!
#------------------------------------------------------------------------------
评论列表
文章目录