Hi! I'm using Language::Prolog::Yaswi.
Everything works ok with 'consult'ing prolog files.
When I write all my prolog in modules (without public/export
declaration) I have problems to use them in L::P::Yaswi.
My mini example (see attachments) has a predicate give_me_sth/2, that
can be used this way in pure swi prolog:
$ pl
?- use_module('a.swipl').
?- use_module('b.swipl').
?- module(a).
a: ?- give_me_sth(2, Answer).
Answer = 222 ;
a: ?- module(b).
b: ?- give_me_sth(2, Answer).
Answer = 2 ;
However I'm not able to call it from Perl with L::P::Yaswi. I always
get: error(existence_error(procedure, '/'(give_me_sth, 2)), _100).
I thought it should basically used this way:
swi_use_modules ( "./a.swipl", "./b.swipl" );
local $swi_module = 'a'; ### or 'b'
swi_set_query( give_me_sth(2, Answer) );
swi_var(Answer);
Please see attachment for full mini example.
If someoene please could give me a hint what I'm doing wrong ...
I'm no prolog wizard anyway, so it's also possible I'm doing
something wrong there.
(Greeti+Tha)nX
Steffen
--
Steffen Schwigon <[EMAIL PROTECTED]>
Dresden Perl Mongers <http://dresden-pm.org/>
#! /usr/bin/perl
use strict;
use warnings;
use Language::Prolog::Types::overload;
use Language::Prolog::Yaswi qw(:query :load :context);
use Language::Prolog::Sugar
functors => { give_me_sth => 'give_me_sth' },
vars => [qw( Answer )] ;
swi_use_modules ( "./a.swipl", "./b.swipl" );
sub yaswi_give_me_sth {
local $swi_module = 'a'; ### or 'b'
# Variante 1
swi_set_query( give_me_sth(2, Answer) );
my $answer = swi_var(Answer) if swi_next;
swi_cut if swi_next;
print "Answer: $answer \n";
}
yaswi_give_me_sth();
a.swipl
Description: Binary data
b.swipl
Description: Binary data
