2016-04-18 2 views
1

Je travaille avec le système éducatif Datalog (DES) et je veux créer un exemple de base de données déductive, qui dérive récursivement la valeur globale des assemblages qui peuvent également avoir des sous-assemblages, ainsi que des parties de routine. Cela fonctionnerait plutôt bien, sinon pour le fait que je ne peux pas empêcher l'exécution de la clause récursive et non récursive. Voici les clauses qui créent le problème:Lorsque vous travaillez avec Datalog Educational System (DES), est-il possible de créer un effet similaire au point d'exclamation dans Prolog?

kop_as(A,B,C) :- 
    assembly(A,C), 
    sum(rek_as(A,D),D,B). 

rek_as(A,B) :- 
    a_s(A,C,Y), 
    viena_as(A,D,_), 
    rek_as(C,E), 
    B=(D+E)*Y. 

rek_as(A,B) :- 
    viena_as(A,B,_). 

Dans ce cas, la sortie est tout à fait essentiellement doublé, à la fois comme la première et la deuxième clause rek_as rek_as est exécuté. En fait, je voudrais faire quelque chose comme ceci:

kop_as(A,B,C) :- 
    assembly(A,C), 
    sum(rek_as(A,D),D,B). 

rek_as(A,B) :- 
    a_s(A,C,Y), 
    viena_as(A,D,_), 
    rek_as(C,E), 
    B=(D+E)*Y,!. 

rek_as(A,B) :- 
    viena_as(A,B,_). 

Mais que me donne une erreur de compilation sur l'utilisation de la syntaxe erronée.

Répondre

1

Peu importe, j'ai trouvé une solution quelques minutes plus tard. La solution n'était pas du tout de faire des calculs dans la clause récursive et de laisser tout le nombre croquant à la clause non récursive.