10/01/29 22:25:00
>>515
% Prolog
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
write_formatted('%t\n',[_診断]),!.
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数):-
repeat,
get_integer(_正の整数),
integer(_正の整数),
_正の整数 >= 0,!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
0 is _数 mod 3,!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
各桁の数字のいづれか(_数,L),
member(3,L),!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_,'NO').
各桁の数字のいづれか(N,[N]) :- N < 10,!.
各桁の数字のいづれか(N,[M|R]) :-
M is N mod 10,
M2 is N // 10,
各桁の数字のいづれか(M2,R).