このディレクトリの索引

#  FizzBuzzは有名問題すぎるので良くないという話があったので、
#  じゃあちょっと問題を変えて、
#  x1..xnとnを入力にとり、xiのいずれかで割り切れる自然数のうち
#  小さいものからn番目の数を出力とかどうだろう。

'x1..xnとnを入力にとり、xiのいずれかで割り切れる自然数のうち小さいものからn番目の数を出力する'(XL,_n) :-
        length([_n番目の自然数|R],_n),
        'XLの何れかで割り切れる自然数のうち小さいものからn番目の数'(XL,1,[],[_n番目の自然数|R]),
        writef('%番目の自然数は %t です\n',[_n,_n番目の自然数]).

'XLの何れかで割り切れる自然数のうち小さいものからn番目'(XL,N,L,L) :- !.
'XLの何れかで割り切れる自然数のうち小さいものからn番目'(XL,N,L1,L) :-
        'NはXLの任意の要素で割り切れる'(N,XL),
        N2 is N + 1,
        'XLの何れかで割り切れる自然数のうち小さいものからn番目'(XL,N2,[N|L1],L).
'XLの何れかで割り切れる自然数のうち小さいものからn番目'(XL,N,L1,L) :-
        N2 is N + 1,
        'XLの何れかで割り切れる自然数のうち小さいものからn番目'(XL,N2,L1,L).

'NはXLの任意の要素で割り切れる'(N,[M|R]) :- 0 is N mod M,!.
'NはXLの任意の要素で割り切れる'(N,[_|R]) :-
        'NはXLの任意の要素で割り切れる'(N,R).