prolog - 从键盘读取一个整数 (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]