Prolog 中的 Collatz 谓词
Collatz predicate in Prolog
我坚持做一些 Prolog 练习。我要写一个谓词 collatz2(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.
我坚持做一些 Prolog 练习。我要写一个谓词 collatz2(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.