要查找从键盘读取整数(N)的十个偶数的列表,第一个元素是N之后的第一个偶数


list.
integer([],_):- 
read(N),
N1 is mod(N,2),
(N<0, FirstNumber is 0
; N1 ==0, FirstNumber is N+2
; N1 ==1, FirstNumber is N+1
),

nth1(1,I,FirstNumber,[]), 
nth1(2,J,FirstNumber+2,I), 
nth1(3,K,FirstNumber+4,J), 
nth1(4,L,FirstNumber+6,K), 
nth1(5,M,FirstNumber+8,L), 
nth1(6,N,FirstNumber+10,M), 
nth1(7,O,FirstNumber+12,N), 
nth1(8,P,FirstNumber+14,O),
nth1(9,Q,FirstNumber+16,P), 
nth1(10,R,FirstNumber+18,Q), 

write(R).

示例1:从键盘上读取的数字是13,则该列表包含[14,16,18,20,22,24,26,28,30,32]。

示例2:从键盘上读取的数字是14,则该列表包含[16,18,20,22,24,26,28,30,32,34]。

示例3:从键盘上读取的数字是-3,或任何负数则该列表包含[0,2,4,6,8,10,12,14,16,18]。

这是我的尝试:

in(Num,U,L,C):-
(   Num mod 2=:=0->  
U is Num+2,
in(U,L,C);
Num mod 2=:=1, Num<0, U is Num+3,
in(U,L,C);
Num >0,U is Num+1,
in(U,L,C)).
in(_,[],0):-!.
in(S,[S|T],C):-
S mod 2=:=0,
S1 is S+2,
C1 is C-1,
in(S1,T,C1).
?- in(13,_,L,10).
L = [14, 16, 18, 20, 22, 24, 26, 28, 30, 32]
?-in(14,_,L,10).
L = [16, 18, 20, 22, 24, 26, 28, 30, 32, 34]
?-in(-3,_,L,10).
L = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

相关内容

最新更新