Re: Bug, or at least something wrong

Paulo Moura <[email protected]>
Newsgroups gmane.comp.gnu.prolog.bugs
Message-ID <[email protected]>
On 2007/10/21, at 20:44, Felipe Ignacio Canas Sabat wrote:

> These are the commands I am using:
>
> %%%%%%%%%%%%
> even(X) :-
>   A is X mod 2,
>   A == 0.
>
> odd(X) :-
>   A is X mod 2,
>   A == 1.
>
> step(X,Y) :-
>   X > 1,
>   even(X),
>   Y is X/2.
>
> step(X,Y) :-
>   X > 1,
>   odd(X),
>   Y is 3*X + 1.
> %%%%%%%%%%%%
>
> And this is what I'm running:
>
>   | ?- step(32,X), step(X,Y), step(Y,Z).
>
> And this is the error I get:
>
>   uncaught exception: error(type_error(integer,16.0),(is)/2)
>
> I don't get this error when I run it on SWI-prolog, and I really don't
> see what the error is. This is the trace:

There is a bug in your code: you want integer division, not float  
division in the first clause of step/2.. GNU Prolog behavior is  
correct. SWI-Prolog is more forgiving. You may also use arithmetic  
equality (=:=/2) instead of term equality (==/2).

Cheers,

Paulo


-----------------------------------------------------------------
Paulo Jorge Lopes de Moura
Dep. of Computer Science, University of Beira Interior
6201-001 Covilhã, Portugal

Office 4.3  Ext. 3257
Phone: +351 275319891 Fax: +351 275319899
Email: <mailto:[email protected]>

Home page: <http://www.di.ubi.pt/~pmoura>
Research: <http://logtalk.org/>
-----------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.