我认为创建了中间表示,但我不知道如何挖掘它们。即使我这样做了,我认为我的第一个建议是编写您想要的更简单的规则。
我很有信心第一个例子可以重写如下。
示例 1 之前
tuple1(x),
tuple2(x),
function1[y, z] = x
<-
in_tuple1(x),
in_tuple2(x, y),
in_tuple3[x, y] = z.
示例 1 之后
tuple1(x) <- in_tuple1(x), in_tuple2(x, y), in_tuple3[x, y] = _.
tuple2(x) <- in_tuple1(x), in_tuple2(x, y), in_tuple3[x, y] = _.
/** alternatively
tuple1(x) <- function1[_, _] = x.
tuple2(x) <- function1[_, _] = x.
**/
function1[y, z] = x
<-
in_tuple1(x),
in_tuple2(x, y),
in_tuple3[x, y] = z.
我对第二个不太自信。这两条规则之间没有冲突。如果这里有问题,您可能会遇到函数依赖冲突,您将通过“错误:函数不能包含冲突记录”的输出或日志记录知道这一点。
示例 2 之前(假设完整的子句以“.”结尾)
tuple1(x,y)
<-
(
in_tuple1(x,z),
in_tuple2(y,z)
)
;
in_tuple2(x,y).
示例 2 之后
tuple1(x,y)
<-
in_tuple1(x,z),
in_tuple2(y,z).
tuple1(x,y)
<-
in_tuple2(x,y).