AI-Prolog
view release on metacpan or search on metacpan
lib/AI/Prolog/Term.pm view on Meta::CPAN
# From XProlog
sub value {
# int i, res = 0;
my $self = shift;
my ( $i, $res ) = ( 0, 0 );
unless ( $self->{bound} ) {
my $term = $self->to_string;
croak("Tried to to get value of unbound term ($term)");
}
return $self->{ref}->value if $self->{deref};
my $functor = $self->getfunctor;
my $arity = $self->getarity;
if ( 'rnd' eq $functor && 1 == $arity ) {
# implement rand
}
if ( $arity < 2 ) {
my $term = $self->to_string;
croak("Term ($term) is not binary");
}
my $arg0 = $self->{args}[0]->value;
my $arg1 = $self->{args}[1]->value;
return $arg0 + $arg1 if 'plus' eq $functor;
return $arg0 - $arg1 if 'minus' eq $functor;
return $arg0 * $arg1 if 'mult' eq $functor;
return $arg0 / $arg1 if 'div' eq $functor;
return $arg0 % $arg1 if 'mod' eq $functor;
return $arg0**$arg1 if 'pow' eq $functor;
croak("Unknown operator ($functor)");
}
1;
__END__
=head1 NAME
AI::Prolog::Term - Create Prolog Terms.
=head1 SYNOPSIS
my $query = Term->new("steals(Somebody, Something).");
=head1 DESCRIPTION
See L<AI::Prolog|AI::Prolog> for more information. If you must know more,
there are plenty of comments sprinkled through the code.
=head1 BUGS
A query using C<[HEAD|TAIL]> syntax does not bind properly with the C<TAIL>
variable when returning a result object. This bug can be found in the
C<_to_data> method of this class.
=head1 SEE ALSO
W-Prolog: L<http://goanna.cs.rmit.edu.au/~winikoff/wp/>
Michael BartE<225>k's online guide to programming Prolog:
L<http://kti.ms.mff.cuni.cz/~bartak/prolog/index.html>
=head1 AUTHOR
Curtis "Ovid" Poe, E<lt>moc tod oohay ta eop_divo_sitrucE<gt>
Reverse the name to email me.
This work is based on W-Prolog, L<http://goanna.cs.rmit.edu.au/~winikoff/wp/>,
by Dr. Michael Winikoff. Many thanks to Dr. Winikoff for granting me
permission to port this.
=head1 COPYRIGHT AND LICENSE
Copyright 2005 by Curtis "Ovid" Poe
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
( run in 0.604 second using v1.01-cache-2.11-cpan-e1769b4cff6 )