このディレクトリの索引 # 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).