在Prolog中应用lambda表达式,eta + alfa转换的反向?

时间:2016-03-13 11:44:43

标签: prolog prolog-coroutining

有几个有趣的problems与共同路由。例如,我们想要收回未达到的冻结目标。但Prolog系统存在一个不支持循环术语的问题。即冻结:

 ?- freeze(V, p(...V...)).

导致内部数据结构中的循环。一个简单的解决方法是解决冻结的目标。因此,我们不使用谓词freeze/2,而是使用谓词guard/2,它可以定义如下:

 guard(V, C) :- freeze(V, call(C, V)).

但我们如何根据freeze/2定义guard/2?明显的定义不起作用,因为它没有引入新的变量,我们仍然遇到闭包含V的问题(假设lambda库中(\)/2是lambda抽象):

 freeze(V, G) :- guard(V, V\G).

再见

0 个答案:

没有答案