2010-12-12 43 views
0

Je m'excuse de perdre votre temps, mais je suis coincé:/ J'ai lu le manuel quelques fois, mais j'ai encore quelques questions sur le développement de Prolog.Net (http: // prolog. hodroj.net/ version).Prolog.NET: backtracing et tableaux

  • Comment obtenir toutes les réponses possibles à une requête? par exemple. Base de données de
f(a, 20). 
f(a, 30). 
f(a, 40). 
f(b, 20).

f (a, X). devrait revenir [20, 30, 40]. J'ai essayé la méthode Redo(), mais cela n'a pas fonctionné pour moi.

  • Comment utiliser les tableaux dans les requêtes? code comme celui-ci
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);

cause de InvalidCastException (ne peut pas convertir. 'System.Collections.ArrayList' à 'Axiom.Runtime.AbstractTerm')

Je serais très reconnaissant pour toute aide. MSM.

Répondre

0

Vérifiez la signature de la méthode q et je parie que les deuxième et troisième paramètres sont du type Axiom.Runtime.AbstractTerm, pas le type System.Collections.ArrayList. database.q (a, c, d, b) est probable où l'exception est levée car elle attend AbstractTerms, où vous envoyez les variables c et d (ArrayLists).

+0

q la signature de la méthode est 'de cource' q (objet, objet, objet, objet, objet). La signature Prolog (cette méthode est la règle prologue compilée) est q (X, [H1 | T1], [H2 | T2], S, M). C'est (99%) un bug dans le compilateur Prolog.net (version beta 0.2), mais je ne sais pas comment le réparer. – MSM