無効なIDかどうかチェック
ふざけて「1212121212」とか「0123456789」とかのIDで登録できないようにあらかじめチェックしておく。
% 無効なIDかどうかチェック, 19May2021
% N.T. Hashimoto
check_invalid_ID(Num) :-
number(Num), Num =:= 1234567890,
write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
number(Num), Num =:= 9876543210,
write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
number(Num),
number_codes(Num,L),
length(L,NN),NN =:= 10,
is_same_element(L),
write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
number(Num),
number_codes(Num,L),
length(L,NN),NN =:= 10,
get_even_odd_list(L,Even,Odd),
is_same_element(Even),
is_same_element(Odd),
write('invalid ID'),nl,!.
check_invalid_ID(Atom) :-
atom(Atom),
atom_codes(Atom,L),
length(L,NN),NN =:= 10,
is_same_element(L),
write('invalid ID'),nl,!.
check_invalid_ID(Atom) :-
atom(Atom),
(
Atom == '0123456789';
Atom == '1234567890';
Atom == '1234554321';
Atom == '5432112345';
Atom == '0987654321';
Atom == '9876543210'
),
write('invalid ID'),nl,!.
% すべて同じ要素
is_same_element([]) :- !,fail.
is_same_element(L) :-
L = [X|Rest],
is_same_element_aux(X,Rest),!.
is_same_element_aux(Ref,[]) :- !.
is_same_element_aux(Ref,[X|Rest]) :-
X == Ref,
!,
is_same_element_aux(Ref,Rest).
% リストを偶数番目と奇数番目にわけ、1212121212のようなIDかどうかチェック
get_even_odd_list(IN,L,R) :-
get_even_odd_list_aux(IN,L,R),!.
get_even_odd_list_aux([],[],[]) :- !.
get_even_odd_list_aux([X,Y|Rest],[X|L],[Y|R]) :-
get_even_odd_list_aux(Rest,L,R).
get_even_odd_list_aux([X|Rest],[X|L],R) :-
get_even_odd_list_aux(Rest,L,R).
この記事が気に入ったらサポートをしてみませんか?