このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1269438098/906
#  10マスある双六で1〜6のランダムの値だけ進むのを繰り返してゴールを目指す。 
#  ぴったりじゃないと余った分引き返す。 
#  (|スタート◎| _ _ _ _ _ _ _ _ _ _ |ゴール|の表示をEnter押すごとに繰り返す) 
#  というプログラムを作りたいのです。 
#   
#  #include <stdio.h> 
#  #include <time.h> 
#  int sa_(void); 
#  int main(void) 
#  { 
#  srand((unsigned int)time(NULL)); 
#  return 0; 
#  } 
#   
#  /*1〜6の値をランダムで返す*/ 
#  int sa_(void) 
#  { 
#  int sai,i; 
#  for(i = 0; i < 10; i++) 
#  { 
#  sai = rand() % 6 + 1;  
#  } 
#  return sai; 
#  } 
#   
#  これを使うように指示されています。よろしくお願いします。 
# 
# 

'10マスある双六で1〜6のランダムの値だけ進むのを繰り返してゴールを目指す。ぴったりじゃないと余った分引き返す。'(_双六のマス表現) :-
        双六のマス(0,11,_双六のマス表現).

双六のマス(Goal,Goal,_双六のマス表現) :- 双六のマス表現(N,Goal,_双六のマス表現),!.
双六のマス(N,Goal,_双六のマス表現) :- 双六のマス表現(N,Goal,_双六のマス表現).
双六のマス(N,Goal,_双六のマス表現) :-
        M is (random mod 6) + 1,
        双六のマス判定(N,Goal,M,N2),
        双六のマス(N2,Goal,_双六のマス表現).

双六のマス判定(N,Goal,M,N2) :-
        N + M =< Goal,
        N2 is N + M,!.
双六のマス判定(N,Goal,M,N2) :-
        N + M > Goal,
        N1 is N + M - Goal,
        N2 is N - N1,!.

双六のマス表現(0,_,'|スタート◎| _ _ _ _ _ _ _ _ _  _  |ゴール|\n') :- !.
双六のマス表現(Goal,Goal,'|スタート| _ _ _ _ _ _ _ _ _  _  |◎ゴール|\n') :- !.
双六のマス表現(N,Goal,_双六のマス表現) :-
        N1 is N - 1,'N個の_ '(N1,S1),
        N2 is Goal - N - 1,'N個の_ '(N2,S2),
        concat_atom(['|スタート| ',S1,'◎',S2,' |ゴール|\n'],_双六のマス表現),!.

'N個の_ '(N) :- length(L,N1),all(L,'_ '),concat_atom(L,S),!.