Prolog.NET:回溯和数组

时间:2010-12-12 21:03:05

标签: .net prolog

我为浪费你的时间而道歉,但我被困了:/ 我几次阅读本手册,但我仍然对Prolog.Net(http://prolog.hodroj.net/版本)中的开发有一些疑问。

  • 如何获得所有可能的查询答案?例如。对于数据库
f(a, 20).
f(a, 30).
f(a, 40).
f(b, 20).

f(a,X)。应该返回[20,30,40]。我尝试过Redo()方法,但它对我没用。

  • 如何在查询中使用数组? 像这样的代码
AbstractTerm a = new AbstractTerm();
AbstractTerm b = new AbstractTerm();
ArrayList c = new ArrayList(symptomsConfirmed.ToArray());
ArrayList d = new ArrayList(symptomsDenied.ToArray());
database.q(a, c, d, b);

导致InvalidCastException(无法从'System.Collections.ArrayList'转换为'Axiom.Runtime.AbstractTerm'。)

我会非常感谢任何帮助。 MSM。

1 个答案:

答案 0 :(得分:0)

检查q方法的签名,我敢打赌第二个和第三个参数是Axiom.Runtime.AbstractTerm类型,而不是System.Collections.ArrayList类型。 database.q(a,c,d,b)可能是抛出异常的地方,因为它期待AbstractTerms,你在其中发送变量c和d(ArrayLists)。