gpt4 book ai didi

Python:是否可以混合生成器和递归函数?

转载 作者:太空狗 更新时间:2023-10-30 01:03:56 26 4
gpt4 key购买 nike

有没有办法让像下面的代码这样的东西工作?

add = lambda n: (yield n) or add(n+1)

(答案不需要是函数式的)

最佳答案

def add(n):
yield n
for m in add(n+1):
yield m

使用递归生成器可以很容易地构建复杂的回溯器:

def resolve(db, goals, cut_parent=0):
try:
head, tail = goals[0], goals[1:]
except IndexError:
yield {}
return
try:
predicate = (
deepcopy(clause)
for clause in db[head.name]
if len(clause) == len(head)
)
except KeyError:
return
trail = []
for clause in predicate:
try:
unify(head, clause, trail)
for each in resolve(db, clause.body, cut_parent + 1):
for each in resolve(db, tail, cut_parent):
yield head.subst
except UnificationFailed:
continue
except Cut, cut:
if cut.parent == cut_parent:
raise
break
finally:
restore(trail)
else:
if is_cut(head):
raise Cut(cut_parent)

...

for substitutions in resolve(db, query):
print substitutions

这是一个由递归生成器实现的 Prolog 引擎。 db 是表示事实和规则的 Prolog 数据库的字典。 unify() 是统一函数,它为当前目标创建所有替换并将更改附加到轨迹,以便稍后可以撤消它们。 restore() 执行撤消操作,is_cut() 测试当前目标是否为“!”,以便我们可以进行分支修剪。

关于Python:是否可以混合生成器和递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com