我有两个用于查找特定项目的查询,它们如下:
query "score" (double s)
Item( score > s )
end
query "price" (double p)
Item( price < p )
end
以下查询用于查找项score > s or price < p
:
query "price or score" (double p, double s)
price(p;) or score(s;)
end
我的问题是如何找到所有项score > s and price < p
以下查询无效。它执行交叉连接,而不是内连接。
query "price and score" (double p, double s)
price(p;) and score(s;)
end
由于
答案 0 :(得分:4)
此查询提供物品事实,其价格&lt; p和得分> S:
query "price and score" (double p, double s)
item: Item(price < p, score > s)
end
要将查询组合为两个查询的组合,您必须提供一个变量来绑定对事实的引用:
query "score" (double s, Item item)
Item( this == item, score > s )
end
query "price" (double p, Item item)
Item( this == item, price < p )
end
query "price and score" (double p, double s )
price(p, item; ) and score(s, item; )
end