2010-05-18 5 views
3

Ceci est une partie du code que je suis en train d'écrireProlog: réduire puis d'écrire la valeur d'un prédicat

assert(bar(foo)), 
assert(foo(bar-5)), 

Je ne sais pas si cela fonctionne bien. J'essaye de l'obtenir pour réduire foo par 5. J'ai besoin d'un moyen d'écrire la valeur de foo, mais n'ai pas trouvé un moyen aussi. write('foo is' + foo) serait la voie logique pour moi, mais ne semble pas fonctionner.

Répondre

1

Pour pouvoir utiliser la valeur d'un fait, vous devez d'abord l'unifier. Unification est fait passer variable non comme un argument à un prédicat, - bar(Moo) dans notre cas:

facts 
    bar(integer) 
    foo(integer) 

goal 
    assert(bar(42)), 
    bar(Moo), 
    Baz = Moo - 5, 
    assert(foo(Baz)), 
    write(Baz). 
+0

Je pensais que 'rétractent/1' est pour la suppression des faits de base de données/table. 'bar (Moo)' devrait essayer de s'unifier, mais laisser les faits dynamiques intacts, je suppose. – ony

+0

@ony: Bien sûr, j'ai simplement laissé entendre que le fait 'foo' devrait être rétracté avant que nous puissions le mettre (un) dans la base des faits, sinon nous finirions avec 2 faits, mise à jour. –

+0

Quel Prolog est-ce? – Kaarel

Questions connexes