Recursion 如何在生成Collatz序列的Prolog代码中解决此类型错误?

Recursion 如何在生成Collatz序列的Prolog代码中解决此类型错误?,recursion,prolog,collatz,Recursion,Prolog,Collatz,我学习Prolog,特别是GNU Prolog,是为了好玩。我认为一个有趣的挑战是给一个种子生成一系列Collatz数,这里是5。这是我的伪代码: collatz(curr, next) -> if even, next is curr / 2 collatz(curr, next) -> if odd, next is curr * 3 + 1 collatz_seq(1, [1]) -> terminate and return 1 collatz_seq(curr, [

我学习Prolog,特别是GNU Prolog,是为了好玩。我认为一个有趣的挑战是给一个种子生成一系列Collatz数,这里是5。这是我的伪代码:

collatz(curr, next) -> if even, next is curr / 2
collatz(curr, next) -> if odd, next is curr * 3 + 1

collatz_seq(1, [1]) -> terminate and return 1
collatz_seq(curr, [curr | accum]) -> next = collatz(curr), collatz_seq(next, accum)
我将其翻译成序言如下:

collatz(Curr, Next) :-
    0 is Curr mod 2,
    Next is Curr / 2.
collatz(Curr, Next) :-
    1 is Curr mod 2,
    Next is Curr * 3 + 1.

collatz_seq(1, [1]) :- !.
collatz_seq(Curr, [Curr | Accum]) :-
    collatz(Curr, Next),
    collatz_seq(Next, Accum).

% collatz_seq(3, X).

我首先像这样运行我的代码:
gprolog——查阅文件collatz.pl
,并在REPL中用
collatz_-seq(3,X)测试了3<代码>未捕获异常:错误(type_error(integer,5.0),(is)/2)
是REPL的响应。我认为这里有一个问题,5被误传为5.0。对于3作为输入,序列应该是3->10->5->16->8->4->2->1,但它在5处终止。当浮点小数点仅为零时,如何避免浮点和整数的混合?

注意:我刚刚解决了这个问题
10/2
产生了
5.0
,因此我将运算符更改为
/
,问题就消失了。