Prolog 中的 Collat​​z 谓词

Collatz predicate in Prolog

我坚持做一些 Prolog 练习。我要写一个谓词 collat​​z2(X,N),假设我们知道 X 是什么,returns N 是 1 结果的索引(从 1 开始)。'collatz2' 是科拉兹函数。所以假设我会写 collatz2(5,N),它应该 return N=6,因为 collatz1(N)(检查下面的这个谓词的解释)导致:

5
16
8
4
2
1
true

我写了一个谓词给出连续的数字:

collatz1(X):-X>0,X mod 2 =:= 0,write(X),nl,X1 is X//2,X1=\=1,collatz1(X1).
collatz1(X):-X>0,X mod 2 =\= 0,write(X),nl,X1 is 3*X +1,X1=\=1,collatz1(X1).
collatz1(2):-write(1).

然而,我想不出第二个谓词。它应该很简单,因为它只是我使用 Prolog 的 beginnig。有人可以帮忙吗?

编辑:

它不是重复的。我还不知道列表,我需要使用我已经知道的(这只是真实的基础)。这是我目前所拥有的:

collatz2(X,1):-X=1.
collatz2(X,N):-X>0,X mod 2 =:= 0,X1 is X//2,collatz2(X1,R),N is R+1.
collatz2(X,N):-X>0,X mod 2 =\= 0,X1 is 3*X+1,collatz2(X1,R),N is R+1.

但我需要以某种方式停止循环:) 谢谢:)

好的,我已经解决了这个问题,我最后的编辑只需要一点点调整:

collatz2(1,4).
collatz2(2,2).
collatz2(X,N):-X>2,X mod 2 =:= 0,X1 is X//2,X=\=1,collatz2(X1,R),N is R+1.
collatz2(X,N):-X>2,X mod 2 =\= 0,X1 is 3*X+1,X=\=1,collatz2(X1,R),N is R+1.