我坚持做一些 Prolog 练习。我要编写一个谓词 collatz2(X,N),假设我们知道 X 是什么,它返回 N,它是 1 的结果的索引(从 1 开始)。'collatz2' 是 Collatz 函数。所以假设我会写collatz2(5,N)
,它应该返回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 的开始。有人可以帮忙吗?
编辑:
它不是重复的。我还不知道列表,我需要使用我已经知道的(这只是真实的基础)。这是我到目前为止所拥有的:
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.
但我需要以某种方式停止循环:) 谢谢:)