このディレクトリの索引

#  Fizz-Buzz問題の例はこんな感じだ。
#  
#  1から100までの数をプリントするプログラムを書け。
#  ただし3の倍数のときは数の代わりに「Fizz」と、
#  5の倍数のときは「Buzz」とプリントし、
#  3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
#  
#  ちゃんとしたプログラマであれば、
#  これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。
#  怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数には
#  それができないのだ。
#  自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
#  

'1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。' :-
        for(1,N,100),        
        表示アトムの選択(N,_表示アトム),
        writef('%t',[_表示アトム]),
        N = 100.

表示アトムの選択(N,_表示アトム) :-
        'ただし3の倍数のときは数の代わりに「Fizz」と'(N,_表示アトム).        
表示アトムの選択(N,_表示アトム) :-
        'ただし5の倍数のときは数の代わりに「Buzz」と'(N,_表示アトム).        
表示アトムの選択(N,_表示アトム) :-
        '3と5両方の倍数のときは数の代わりに「FizzBuzz」と'(N,_表示アトム).      表示アトムの選択(N,_表示アトム) :-
        \+(0 is N mod 3),
        \+(0 is N mod 5),
        swritef(_表示アトム,'%t',[N]).

'ただし3の倍数のときは数の代わりに「Fizz」と'(N,'Fizz') :-
        0 is N mod 3,
        \+(0 is N mod 5).

'ただし5の倍数のときは数の代わりに「Buzz」と'(N,'Buzz') :-
        0 is N mod 5,
        \+(0 is N mod 3).

'3と5両方の倍数の場合には「FizzBuzz」'(N,'FizzBuzz') :-
        0 is N mod 3,
        0 is N mod 5.