このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1367772345/105
#  103じゃないけど、yieldを使ってジェネレータが書ける 
こんな感じで 
#  
#  def product(xss): 
#      if xss: 
#          for x in xss[0]: 
#              for y in product(xss[1:]): 
#                  yield x + y 
#      else: 
#          yield '' 
#  
#  print(','.join(product(['abc', 'xy', '12']))) #=> ax1,ax2,ay1,ay2,bx1,bx2,by1,by2,cx1,cx2,cy1,cy2 
#  
#  106 :デフォルトの名無しさん :sage :2013/05/07(火) 07:27:40.99
#  普通の3重ループじゃ駄目なの? 
#  
#  107 :デフォルトの名無しさん :sage :2013/05/07(火) 07:30:37.41
#  
#  
#  >>106 
#  ループ数は引数のリストの長さで決まるから、 
#  再帰を使った方が書きやすいよ 
#  
#  108 :デフォルトの名無しさん :sage :2013/05/07(火) 07:58:37.14
#  >>106 
#  n重ループ 
#  
#  109 :デフォルトの名無しさん :sage :2013/05/07(火) 08:27:20.88
#  やっぱpythonのjoinはちょっと気持ち悪いな 
#  List.joinでいいじゃんと思ってしまう 
#  設計思想的にこうなんだろうけど 
#  
#  110 :デフォルトの名無しさん :sage :2013/05/07(火) 08:54:06.01
#  List.joinでは手続き的すぎて古臭いって思想か 
#  ジェネレータもそれかな 
#  ただの軽量スレッドでは面白くないからジェネレータなのだ 
#  
#  111 :デフォルトの名無しさん :sage :2013/05/07(火) 10:25:49.03
#  ジェネレータで書けるものを再帰で再現するとスタックの無駄遣いで 
#  再帰の方が非効率だと思う 
#  
#  >
% Prologでジェネレータ書いてみる。やはり再帰でしか書けない。 



product([_文字列],_一文字) :- 
    sub_atom(_文字列,_,1,_,_一文字). 
product([_文字列|R1],_生成文字列) :- 
    sub_atom(_文字列,_,1,_,_一文字), 
    product(R1,_生成文字列_2), 
    atom_concat(_一文字,_生成文字列_2,_生成文字列).