2011-02-05 4 views
0

J'ai essayé d'exécuter un fichier via un script shell et d'écrire sa sortie dans ce fichier.Exécution de Prolog Sicstus via un fichier shell

Le script très simple est:

/usr/local/sicstus4.1.1/bin/sicstus -l exécuter --goal "Runh ('exemples/calls_matlab.pl', S), arrêt." > "/ Users/Andrew/Dropbox/IP/phase de modélisation/rules.txt"

Cependant, quand je lance cela, il échoue avec l'erreur suivante: SICStus (24883,0x7fff70916ca0) malloc: * erreur pour objet 0x10082b408: somme de contrôle incorrecte pour l'objet libéré - l'objet a probablement été modifié après avoir été libéré. * définir un point d'arrêt dans malloc_error_break à déboguer

D'autre part, si je supprime "halt" du but, tout va bien, mais Sicstus est toujours en cours d'exécution.

Existe-t-il un moyen de quitter sicstus, sans avoir à subir l'erreur ci-dessus à travers mon script shell?

J'apprécie votre temps.

Andreas

+0

Cela sent d'un bogue dans le pont SICStus-Matlab. Se plaindre à la personne qui a écrit ça. –

+0

le fichier généré matlab est parfaitement valide. en fait si je le lance en prologue (sans script shell, tout va bien). ce qui cause l'erreur est l'arrêt immédiatement après avoir exécuté le but. Je suspecte qu'il essaye de s'arrêter avant d'avoir fini d'écrire la sortie dans le fichier texte. Je ne peux pas penser à une solution alternative :( – kkudi

Répondre

1

Que faire si vous exécutez votre script et réexpédie le tuyau d'entrée avec /dev/null? Et supprimez l'option d'arrêt.

/usr/local/sicstus4.1.1/bin/sicstus -l run --goal "runh('examples/calls_matlab.pl', S)." > "/Users/Andrew/Dropbox/IP/modelling phase/rules.txt" < /dev/null

Ce que je ne faisais sicstus -l my_file.pl --goal "test_strategy(10,random,random)." < /dev/null

test_strategy est mon prédicat qui retourne à la coquille.

Cheers, Dan