I am trying to create a function called collatz_list in Prolog. This function takes two arguments, the first one is a number and the second in a list. This list will be my output of this function. So, here’s my function:
collatz_list(1,[1]).
collatz_list(N,[H|T]) :-
N > 1,
N mod 2 =:= 0,
collatz_list(N, [H|T]).
collatz_list(N,[H|T]) :-
N > 1,
N mod 2 =:= 1,
N is N*3 +1,
collatz_list(N,[H|T]).
I am struggling with creating the output list. Can anyone help me on that?
Thanks.
Assuming you want to write a
collatz_list/2predicate with parameters(int, list), wherelistis the collatz sequence starting withintand eventually ending with1(we hope so! It’s an open problem so far); you just have to code the recursive definition in the declarative way.Here’s my attempt:
Modified version, includes starting number
Let’s test it: