2016-04-04 3 views
0

J'ai plus de 150 sujets et chaque sujet a les informations suivantes que je veux mettre mes deffactsEst-ce que les faits peuvent avoir des sous-faits dans JESS?

> Subject: CS222 
> Pre-requisite: CS111 
> Units: 4 
> Priority-lvl: 3 
> Semester-offered: 2 
> Class: A 
>  Schedule: 9:00am - 10:00am (Mon & Wed) 
>  Slots Available: 30 
> Class: B 
>  Schedule: 9:00am - 10:00am (Tue - Thurs) 
>  Slots Available: 26 
> Class: C 
>  Schedule: 12:00nn - 01:30pm (Mon - Wed) 
>  Slots Available: 10 

Je sais comment écrire deffacts mais le problème est ici, j'ai deux informations pour chaque classe (ce qui devient clairement subfact) et je ne sais pas comment convertir cette information en deffacts.

Je sais que je peux faire 4 desffacts avec de telles informations comme ci-dessous mais je ne trouve pas le code efficace. Existe-t-il un autre moyen de supprimer les informations ci-dessus?

(Deffacts subject 
    (subject-information 
      (name CS222) 
      (identifier 1) 
      (pre-requisite CS111) 
      (priority-lvl 3) 
      (units 4) 
      (semester-offered 2))) 

(Deffacts Ident 
    (ident-class 
       (identifier 1) 
       (class A) 
       (schedule 0900-1000MW) 
       (stud-avail 30))) 

(Deffacts Ident 
    (ident-class 
       (identifier 1) 
       (class B) 
       (schedule 0900-1000TTH) 
       (stud-avail 26))) 

(Deffacts Ident 
    (ident-class 
       (identifier 1) 
       (class C) 
       (schedule 1200-0130MW) 
       (stud-avail 10))) 
+0

N'ajoutez pas de balise "shell" à vos questions. – laune

+0

Je l'ajoutais parce que je pensais que JESS était shell lui-même. –

Répondre

0

Si vous êtes inquiet au sujet de la consommation de mémoire: 150 sujets et quelques classes pour chacun d'eux est nulle part près de provoquer une exception OutOfMemory.

Si vous êtes préoccupé par "l'efficacité" en termes de temps d'exécution, je ne peux pas dire - cela dépend des règles d'accès à ces faits. L'utilisation de deux modèles différents ou la compression en un seul dépend de ce que vous voulez faire dans les règles d'accès aux données. Habituellement, il est préférable d'éviter les listes en tant que propriétés et de s'en tenir au modèle relationnel, c'est-à-dire ce que vous avez.

L'identifiant "slot" n'apparaît pas dans les données brutes. Je suppose que vous l'avez introduit pour relier les faits de classe au fait sujet. Il pourrait être préférable d'utiliser le nom du sujet à la place.

+0

Je suppose que je vais juste suivre votre chemin et enlever l'identifiant à la place, donc je n'aurai pas besoin de 4 deffacts. Je vous remercie! –

+0

Que je n'ai * pas * recommandé - il vous restera encore 4 faits. Et (du moins pas sans connaître les règles de traitement) Je * ne le fais pas, * répète: ne suggère pas de tout mettre dans un gros morceau de données (en utilisant des multislots). – laune

+0

Non madame, ce que je voulais dire, c'est que je vais supprimer l'identifiant et utiliser le nom du sujet à la place. Cela me laisserait toujours avec 3 faits. –