Souffle中Qslow查询返回零结果,预期3条结果的问题求助
排查Qslow返回0结果的可能原因
- 大小写敏感问题:Souffle对字符串严格区分大小写。检查
Parent.facts中Alice的拼写(比如是alice还是Alice),必须和Qslow子句里的名字完全一致,否则无法匹配。 - Qslow子句逻辑错误:
- 若Qslow直接关联
Parent而非Descendant,比如写Qslow(x) :- Parent(Alice, x).,只能查到Alice的直接子女,无法覆盖间接后代;你明确说Descendant里有Alice的3个后代,正确写法应该是Qslow(x) :- Descendant(Alice, x). - 注意变量绑定,比如子句写成
Qslow(y) :- Descendant(Alice, x).,y未被任何关系绑定,会导致无结果。
- 若Qslow直接关联
- Qslow的关系声明错误:如果Qslow被声明为
input类型(比如.decl Qslow(x) input),Souffle只会读取对应事实文件的数据,不会通过子句推导。要确保Qslow是普通推导关系,声明应为.decl Qslow(x)。 - 数据格式问题:确认
Parent.facts的格式符合Souffle要求——每行一个事实,字段用制表符分隔,无多余空格或换行。若格式错误,可能导致部分事实未正确加载,即使Descendant统计看似正确,也可能Alice的条目存在异常。
内容的提问来源于stack exchange,提问作者tekknolagi
相关产品推荐
相关产品推荐

