このディレクトリの索引

% 以下のサイトは # 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). % 以下のサイトは # FizzBuzzは有名問題すぎるので良くないという話があったので、 # じゃあちょっと問題を変えて、 # x1..xnとnを入力にとり、xiのいずれかで割り切れる自然数のうち # 小さいものからn番目の数を出力とかどうだろう。 'x1..xnとnを入力にとり、xiのいずれかで割り切れる自然数のうち小さいものからn番目の数を出力する'(XL,_n) :- 'XLの何れかで割り切れる自然数のうち小さいものからn番目の数'(XL,_n,_n番目の数), 'n番目の数を出力する'(_n,_n番目の自然数). 'XLの何れかで割り切れる自然数のうち小さいものからn番目の数'(XL,_n,_n番目の自然数) :- length([_n番目の数|R],_n), 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(XL,1,[],[_n番目の自然数|R]),!. 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(_,_,L,L) :- !. 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(XL,M,L1,L) :- 'MはXLの任意の要素で割り切れる'(M,XL), M2 is M + 1, 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(XL,M2,[M|L1],L). 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(XL,M,L1,L) :- M2 is M + 1, 'XLの任意の要素で割り切れる自然数ならびを要素数nまで成長させる'(XL,M2,L1,L). 'NはXLの任意の要素で割り切れる'(N,[M|R]) :- 0 is N mod M,!. 'NはXLの任意の要素で割り切れる'(N,[_|R]) :- 'NはXLの任意の要素で割り切れる'(N,R). 'n番目の数を出力する'(_n,_n番目の自然数) :- writef('%t番目の自然数は %t です\n',[_n,_n番目の自然数]),!. % 以下のサイトは # twitter_by_@nooyosh_20111115_1 # # カレントディレクトリ以下にあるすべてのPDFファイルのサイズを合計して表示 # 'カレントディレクトリ以下にあるすべてのPDFファイルのサイズを合計して表示'(_合計サイズ) :- shs('ls -s *.pdf',L), findsum(_サイズ,( append(_,[_行|_],L), split(_行,[' '],[_サイズ|_])), _合計サイズ). % 以下のサイトは # [1,2,3,4,5]というリストを受け取って、 # [[],[1],[2],[3],[4],[5],[1,2],[2,3],[3,4],[4,5],[5,1],[1,2,3]...]というリストを返す関数を作りたい 冪集合(_集合,_冪集合) :- findall(L,部分集合(_集合,L),_冪集合). 部分集合(L,X) :- length(L,M), for(1,N,M), 組合せ(L,N,X). 部分集合(_,[]). 組合せ(L,1,[A]) :- member(A,L). 組合せ([A|R1],N,[A|R3]) :- N > 1, N_1 is N - 1, 組合せ(R1,N_1,R3). 組合せ([_|R1],N,L) :- N > 1, 組合せ(R1,N,L). % 以下のサイトは # @plus7さんの20120215のツイートより、 # # let atm = 101300.0<Pa>;; # let water_density = 1000.0<kg/m^3>;; # let g = 9.80665<m/s^2>;; # let length:float<m> = atm / (water_density*g);; # # このF#のブログラムと同じ内容のPrologプログラムは? :- op(250,xf,'Pa'). :- op(250,xf,'kg/m^3'). :- op(250,xf,'m/s^2'). :- op(250,xf,m). atm(101300.0 'Pa'). water_density(1000.0 'kg/m^3'). g(9.80665 'm/s^2'). length(_length m) :- atm(_atm 'Pa'), water_density(_water_density 'kg/m^3'), g(_g 'm/s^2'), _length is _atm / (_water_density * _g). % 以下のサイトは # @plus7さんの20120215のツイートより、 # # let atm = 101300.0<Pa>;; # let water_density = 1000.0<kg/m^3>;; # let g = 9.80665<m/s^2>;; # let length:float<m> = atm / (water_density*g);; # # このF#のブログラムと同じ内容のPrologプログラムは? atm(101300.0) :- '単位はPA'. water_density(1000.0) :- '単位はkg/m^3'. g(9.80665) :- '単位はm/s^2'. length(_length) :- '単位はm', atm(_atm), water_density(_water_density), g(_g), _length is _atm / (_water_density * _g). '単位はPA'. '単位はkg/m^3'. '単位はm/s^2'. '単位はm'. % 以下のサイトは # # Prologという宣言型プログラミング言語にふれる。ルールを定義するという点を除くと、 # 確かにSQL(データに対しこれ欲しいみたいなクエリ)に近しい感じがします。 # ということで、アクセスパス(性能)が気になるのは、命令型に侵されてるからかな? % % Prologの述語の定義節の間では基本的に情報の授受ができません。 % 具体的に示しましょう。 % 成績(阿部,70). 成績(尾崎,55). 成績(山田,90). % と定義されている時、三人の平均点を取りたいとします。(集約問題) ?- 成績(_,_成績). _ = 阿部, _成績 = 70; _ = 尾崎, _成績 = 55; _ = 山田, _成績 = 90; false % というように取得できますが、_ = _尾崎,_成績 = 55が取得できた時には阿部の % 情報は変数の束縛を開放してしまっていますから、利用できません。 % 個々の節が全く独立しているわけですから合計していくことができないことになります。 % ただし、以下のように情報が連鎖するように仕組めば可能になります。 % 成績(阿部,尾崎,70). 成績(尾崎,山田,55). 成績(山田,阿部,90). 成績の平均(_起点,_平均点) :- 成績(_起点,_生徒,_), 成績の合計(_起点,_生徒,_人数,_合計), _平均点 is _合計 / _人数. 成績の合計(_起点,_起点,1,_成績) :- 成績(_起点,_,_成績),!. 成績の合計(_起点,_生徒_1,_人数,_合計) :- 成績(_生徒_1,_生徒_2,_成績), 成績の合計(_起点,_生徒_2,_人数_2,_合計_2), _合計 is _合計_2 + _成績, _人数 is _人数_2 + 1. % と一応はできました。 % 実は集約するために必要な条件は情報の連鎖なのです。 % Prologで扱う連鎖構造の代表にリストがあります。 % ここでも、[70,55,90]というリストが欲しい。 % 成績という述語の節の中にある成績(点数)だけを抜き出してリストとしたい。 % これを実現するfindallというメタ述語がPrologには用意されています。 成績(阿部,70). 成績(尾崎,55). 成績(山田,90). 成績リスト(_成績リスト) :- findall(_成績,成績(_,_成績),_成績リスト). ?- 成績リスト(_成績リスト). _成績リスト = [70,55,90]; false % と成ります。 % % このfindallこそ SQL にそっくりですね。 % 成績の平均(_平均点) :- 成績リスト(_成績リスト), sum(_成績リスト,_合計), length(_成績リスト,_人数), _平均点 is _合計 / _人数. % ただし、sumの定義は sum([],0). sum([N|R],_合計) :- sum(R,_合計_2), _合計 is _合計_2 + N. % 以下のサイトは # # /(a|b)\1{5}/ で 「aaaaaa」と「bbbbbb」にはマッチするけど # 「ababab」とか「aabbaa」にはマッチしない。 # 正規表現ってこういう書き方できるんだ・・・。 # 後方参照を同じ正規表現の中で使えるというか、そんな感じ。 文字候補(a). 文字候補(b). 決まった文字数の同一文字ならび(_文字列,_文字数,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), length(L2,_文字数), all(L1,A), 文字候補(A). all([],_). all([A|R],A) :- all(R,A). % 以下のサイトは # @ideoneさん 2012/03/12 のtwitterより # # test:-disp(6,[12,15,4,10,2,18,7,14,21,5],[7,8,10,5,-1,1,-1,6,-1,-1],[3,-1,-1,9,-1,4,-1,2,-1,-1],[]). # # disp(Index,Key,Left,Right,Stack):- # find(Key,Index,K), # write(K),write(' '), # find(Right,Index,R), # stackin(Stack,R,Stacktmp), # find(Left,Index,L), # stackin(Stacktmp,L,Newstack), # cal(Key,Left,Right,Newstack). # # cal(Key,Left,Right,[]). # cal(Key,Left,Right,[X|Z]):- # disp(X,Key,Left,Right,Z). # # stackin(Stack,-1,Stack). # stackin(Stack,V,Newstack):-push(Stack,V,Newstack). # # find([X|A],1,X). # find([X|A],V,Z):-W is V-1, find(A,W,Z). # # push(A,X,[X|A]). # # pop([X|A],X,A). # test :- disp(6,[12,15,4,10,2,18,7,14,21,5],[7,8,10,5,-1,1,-1,6,-1,-1],[3,-1,-1,9,-1,4,-1,2,-1,-1],[]). disp(Index,Key,Left,Right,Stack) :- disp([Index|Stack],Key,Left,Right). disp([],_,_,_). disp([Index|Stack_1],Key,Left,Right):- disp_Key(Index,Key), stackin(Index,Left,Right,Stack_1,Stack_2), disp(Stack_2,Key,Left,Right). disp_Key(Index,Key) :- nth1(Index,Key,K), writef('%t ',[K]). stackin(Index,Left,Right,Stack_1,Stack_2) :- nth1(Index,Left,V_1), stackin(Stack_1,V_1,Stack_3), nth1(Index,Right,V_2), stackin(Stack_3,V_2,Stack_2). stackin(Stack,-1,Stack). stackin(Stack,V,Newstack) :- push(Stack,V,Newstack). push(A,X,[X|A]). % 以下のサイトは # @ideoneさん 2012/03/12 のtwitterより # # test:-disp(6,[12,15,4,10,2,18,7,14,21,5],[7,8,10,5,-1,1,-1,6,-1,-1],[3,-1,-1,9,-1,4,-1,2,-1,-1],[]). # # disp(Index,Key,Left,Right,Stack):- # find(Key,Index,K), # write(K),write(' '), # find(Right,Index,R), # stackin(Stack,R,Stacktmp), # find(Left,Index,L), # stackin(Stacktmp,L,Newstack), # cal(Key,Left,Right,Newstack). # # cal(Key,Left,Right,[]). # cal(Key,Left,Right,[X|Z]):- # disp(X,Key,Left,Right,Z). # # stackin(Stack,-1,Stack). # stackin(Stack,V,Newstack):-push(Stack,V,Newstack). # # find([X|A],1,X). # find([X|A],V,Z):-W is V-1, find(A,W,Z). # # push(A,X,[X|A]). # # pop([X|A],X,A). # test :- disp(6,[12,15,4,10,2,18,7,14,21,5],[7,8,10,5,-1,1,-1,6,-1,-1],[3,-1,-1,9,-1,4,-1,2,-1,-1],[]). disp(Index,Key,Left,Right,Stack) :- disp([Index|Stack],Key,Left,Right). disp([],_,_,_). disp([Index|Stack_1],Key,Left,Right):- disp_Key(Index,Key), stackin(Index,Left,Right,Stack_1,Stack_2), disp(Stack_2,Key,Left,Right). disp_Key(Index,Key) :- nth1(Index,Key,K), writef('%t ',[K]). stackin(Index,Left,Right,Stack_1,Stack_2) :- find(Left,Index,V_1), stackin(Stack_1,V_1,Stack_3), find(Right,Index,V_2), stackin(Stack_3,V_2,Stack_2). stackin(Stack,-1,Stack). stackin(Stack,V,Newstack) :- push(Stack,V,Newstack). find([X|A],1,X) :- !. find([X|A],V,Z) :- W is V-1, find(A,W,Z). find([],_,-1). push(A,X,[X|A]). % 以下のサイトは # # @haroperiさんの20120420のツイートより # # 双方向性のあるQuicksortが書けないので寝るです。だめだもうだめだ。 *喪中* # 双方向性のあるQuicksort(L1,L2) :- 最初にL1とL2の要素数を揃える(L1,L2),!, 双方向クイックソート(L1,L2). 双方向クイックソート([],[]). 双方向クイックソート([A|R1],L2) :- 双方向クイックソート(A,R1,L2). 双方向クイックソート(A,L1,L2) :- append(L5,[A|L6],L2), 双方向性のあるQuicksort(L3,L5), 双方向性のあるQuicksort(L4,L6), 整列のための分割(A,L1,L3,L4). 整列のための分割(A,[],[],[]). 整列のための分割(A,[B|R1],[B|R2],L) :- B @< A, 整列のための分割(A,R1,R2,L). 整列のための分割(A,[B|R1],L,[B|R2]) :- B @>= A, 整列のための分割(A,R1,L,R2). 最初にL1とL2の要素数を揃える(L1,L2) :- length(L1,Len), length(L2,Len),!. % % 最初に要素数を揃えてしまうため、重複解を許さない(集合)仕様ではうまく行かない % % 双方向クイックソート/3の中で 双方向性のあるQuicksort/3 を呼ぶ。 % 私はここで 双方向クィックソート/3 を呼んでしまったので最初失敗した。 % % 以下のサイトは # # @haroperiさんの20120420のツイートより # # 双方向性のあるQuicksortが書けないので寝るです。だめだもうだめだ。 *喪中* # 双方向性のあるQuicksort(L1,L2) :- 最初にL1とL2の要素数を揃える(L1,L2),!, 双方向クイックソート(L1,L2). 双方向クイックソート([],[]). 双方向クイックソート([A|R1],L2) :- 双方向クイックソート(A,R1,L2). 双方向クイックソート(A,L1,L2) :- append(L5,[A|L6],L2), 双方向性のあるQuicksort(L3,L5), 双方向性のあるQuicksort(L4,L6), 整列のための分割(A,L1,L3,L4). 整列のための分割(A,[],[],[]). 整列のための分割(A,[B|R1],[B|R2],L) :- B @< A, 整列のための分割(A,R1,R2,L). 整列のための分割(A,[B|R1],L,[B|R2]) :- B @>= A, 整列のための分割(A,R1,L,R2). 最初にL1とL2の要素数を揃える(L1,L2) :- length(L1,Len), length(L2,Len),!. % % 最初に要素数を揃えてしまうため、重複解を許さない(集合)仕様ではうまく行かない % % 双方向クイックソート/3の中で 双方向性のあるQuicksort/3 を呼ぶ。 % 私はここで 双方向クィックソート/3 を呼んでしまったので最初失敗した。 % % 以下のサイトは # # @haroperiさんの20120420のツイートより # # 双方向性のあるQuicksortが書けないので寝るです。だめだもうだめだ。 *喪中* # 双方向性のあるQuicksort([],[]). 双方向性のあるQuicksort(L1,L2) :- 最初にL1とL2の要素数を揃える(L1,L2),!, append(L0,[A|R0],L1), append(L0,R0,L11), append(L5,[A|L6],L2), 整列のための分割(A,L11,L3,L4), 双方向性のあるQuicksort(L3,L5), 双方向性のあるQuicksort(L4,L6). 整列のための分割(A,[],[],[]). 整列のための分割(A,[B|R1],[B|R2],L) :- B @< A, 整列のための分割(A,R1,R2,L). 整列のための分割(A,[B|R1],L,[B|R2]) :- B @>= A, 整列のための分割(A,R1,L,R2). 最初にL1とL2の要素数を揃える(L1,L2) :- length(L2,Len), length(L1,Len). % % 現在のエラーは % 普通のソートの時、複数解(同一解)出力されてしまう。 % これを直すのは難しいだろう。 % % 以下のサイトは # # @haroperiさんの20120420のツイートより # # 双方向性のあるQuicksortが書けないので寝るです。だめだもうだめだ。 *喪中* # 双方向性のあるQuicksort([],[]). 双方向性のあるQuicksort(L1,L2) :- 最初にL1とL2の要素数を揃える(L1,L2),!, append(L0,[A|R0],L1), ( \+(var(A)), ! ; true ), append(L0,R0,L11), append(L5,[A|L6],L2), 整列のための分割(A,L11,L3,L4), 双方向性のあるQuicksort(L3,L5), 双方向性のあるQuicksort(L4,L6). 整列のための分割(A,[],[],[]). 整列のための分割(A,[B|R1],[B|R2],L) :- B @< A, 整列のための分割(A,R1,R2,L). 整列のための分割(A,[B|R1],L,[B|R2]) :- B @>= A, 整列のための分割(A,R1,L,R2). 最初にL1とL2の要素数を揃える(L1,L2) :- length(L2,Len), length(L1,Len). % 以下のサイトは # twitter_by_@ari_st_20120509 # # *バグめも ・andがand,or,xorを内包する論理演算ができない ・xorがandを内包すると xor(and(t, t), ~) のときの結果が逆 ・or(xor(f,t),f)がfalse、or(xor(t,f),f)がfalse # *続 ・or(or(f,t),t)がtrue、or(or(f,t),f)がfalse ・xor(or(t, f), t)がtrue、xor(or(t, f), f)がfalse ・xor(f,xor(t,f))がfalse、xor(t,xor(t,f))がtrue #ありさとメモ # ORとXORは内包してる論理演算の方を無視して真理値だけの方の値と同じものを答えてる感。。。(´・ω・`) # or(xor(hoge1, hoge2), xor(hoge3, hoge4))系はhoge1~4がどのような組み合わせでも全部false(だと思われる # Prologわからん・・・・・これどうやったらいいの・・・・・ # or(A,B) :- A,B. or(A,B) :- \+(A),B. or(A,B) :- A,\+(B). or(A,B) :- \+(A),\+(B),fail. xor(A,B) :- A,B,fail. xor(A,B) :- \+(A),B. xor(A,B) :- A,\+(B). xor(A,B) :- \+(A),\+(B),fail. and(A,B) :- A,B. and(A,B) :- \+(A),B,fail. and(A,B) :- A,\+(B),fail. and(A,B) :- \+(A),\+(B),fail. not(A) :- A,!,fail. not(A). nand(A,B) :- A,B,fail. nand(A,B) :- \+(A),B. nand(A,B) :- A,\+(B). nand(A,B) :- \+(A),\+(B). % 以下のサイトは # # 述語経路/2を定義するための述語 経路定義/1 を定義しなさい。 # # 仕様として図.2のような格子状グラフが述語'図2.1'で定義されています。 # これを図.2.2で表されるグラフに対応する 述語 経路/1として定義します。 # 節の名称は"あ-と"を述語 節の命名順/1 の引数リストから受け取って # 順に振っていきます。 # # P-+-+-+ あーいーうーえ # | | | | | | | |  # +-+-+-+ おーかーきーく # | | | |   | | # +-+-+ + けーこーさ し # | | | | | | | | # +-+ +-+ すーせ そーた # | | | | | | | | # +-+-+-Q ちーつーてーと # # 図.2 図.2.2 # # この図.2から 図.2.2 に対応する述語 経路/2 を以下のように定義するための # 述語を定義します。 # # 経路(あ,い). # 経路(あ,お). # 経路(い,う). # 経路(い,か). # 経路(う,え). # 経路(う,き). # 経路(え,く). # 経路(お,か). # 経路(お,け). # 経路(か,き). # 経路(き,く). # 経路(き,さ). # 経路(く,し). # 経路(け,こ). # 経路(け,す). # 経路(こ,さ). # 経路(こ,せ). # 経路(さ,そ). # 経路(し,た). # 経路(す,せ). # 経路(す,ち). # 経路(せ,つ). # 経路(そ,た). # 経路(ち,つ). # 経路(つ,て). # 経路(て,と). # 節の命名順([あ,い,う,え,お,か,き,く,け,こ,さ,し,す,せ,そ,た,ち,つ,て,と]). '図.2.1'([['P',-,+,-,+,-,+], ['|',' ','|',' ','|',' ','|'], [+,-,+,-,+,-,+], ['|',' ',' ',' ','|',' ','|'], [+,-,+,-,+,' ',+], ['|',' ','|',' ','|',' ','|'], [+,-,+,' ',+,-,+], ['|',' ','|',' ','|',' ','|'], [+,-,+,-,+,-,'Q']]). % '図.2.1'([['あ',-,い,-,う,-,え], % ['|',' ','|',' ','|',' ','|'], % [お,-,か,-,き,-,く], % ['|',' ',' ',' ','|',' ','|'], % [け,-,こ,-,さ,' ',し], % ['|',' ','|',' ','|',' ','|'], % [す,-,せ,' ',そ,-,た], % ['|',' ','|',' ','|',' ','|'], % [ち,-,つ,-,て,-,と]]). 接続定義 :- '図.2.1'(_グラフ), 節に名前を振る(_グラフ,_命名された節をもつグラフ), 接続定義(_命名された節をもつグラフ). 節に名前を振る(_グラフ,_命名された節をもつグラフ) :- 節の命名順(_節の命名順), 節に名前を振る(_グラフ,_節の命名順,_命名された節をもつグラフ). 節に名前を振る([],_,[]). 節に名前を振る([L1|R1],L2,[L1_2|R3]) :- 節に名前を振る(L1,L2,R,L1_2), 節に名前を振る(R1,R,R3). 節に名前を振る([],R2,R2,[]). 節に名前を振る(['P'|R1],[A|R2],R,[A|R4]) :- assertz(出発点(A)), 節に名前を振る(R1,R2,R,R4). 節に名前を振る(['Q'|R1],[A|R2],R,[A|R4]) :- assertz(終着点(A)), 節に名前を振る(R1,R2,R,R4). 節に名前を振る(['+'|R1],[A|R2],R,[A|R4]) :- 節に名前を振る(R1,R2,R,R4),!. 節に名前を振る([' '|R1],L2,R,[' '|R4]) :- 節に名前を振る(R1,L2,R,R4),!. 節に名前を振る([_記号|R1],L2,R,[_記号|R4]) :- 節に名前を振る(R1,L2,R,R4). 右と下両方向の接続定義(_命名された節をもつグラフ) :- 接続定義(_命名された節をもつグラフ), 転置(_命名された節をもつグラフ,_転置された命名された節をもつグラフ), 接続を定義する(_転置された命名された節をもつグラフ). 接続定義([]) :- !. 接続定義([L|R]) :- 一列の接続の定義(L), 接続定義(R). 一列の接続の定義([]). 一列の接続の定義([A,-,C|R]) :- \+(空白か記号(A)), \+(空白か記号(C)), assertz(接続(A,B)), 一列の接続の定義([C|R]),!. 一列の接続の定義([A,'|',C|R]) :- \+(空白か記号(A)), \+(空白か記号(C)), assertz(接続(A,B)), 一列の接続の定義([C|R]),!. 一列の接続定義([A|R]) :- 接続の定義(R). 空白か記号(' ') :- !. 空白か記号(A) :- member(A,[-,'|']). % 以下のサイトは # http://oshiete.goo.ne.jp/qa/7474619.html # A,B,Cを使って直角三角形が成り立ち真となる関係right triangleを定義するプログラムを教えてください。今のところ # triangle(A,B,C). # vertical(seg(point(X,Y),point(X,Y1)). # horizontal(seg(point(X,Y),point(X1,Y)). # を使うところまではわかっているのですが先に進みません。 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- A * A =:= B * B + C * C. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- B * B =:= A * A + C * C. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- C * C =:= A * A + B * B. % 以下のサイトは # http://oshiete.goo.ne.jp/qa/7474619.html # A,B,Cを使って直角三角形が成り立ち真となる関係right triangleを定義するプログラムを教えてください。今のところ # triangle(A,B,C). # vertical(seg(point(X,Y),point(X,Y1)). # horizontal(seg(point(X,Y),point(X1,Y)). # を使うところまではわかっているのですが先に進みません。 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- A > B,A > C, A * A =:= B * B + C * C,!. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- B > A,B > C, 'A,B,Cを使って直角三角形が成り立ち真となる関係'(B,A,C). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(A,B,C) :- C > A,C > B, 'A,B,Cを使って直角三角形が成り立ち真となる関係'(C,A,B). % 以下のサイトは # http://oshiete.goo.ne.jp/qa/7474619.html # A,B,Cを使って直角三角形が成り立ち真となる関係right triangleを定義するプログラムを教えてください。今のところ # triangle(A,B,C). # vertical(seg(point(X,Y),point(X,Y1)). # horizontal(seg(point(X,Y),point(X1,Y)). # を使うところまではわかっているのですが先に進みません。 'A,B,Cを使って直角三角形が成り立ち真となる関係'(座標(A),座標(B),座標(C)) :- '三点の座標から辺の長さを得る'(A,B,C,_辺1,_辺2,_辺3), 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(_辺1),辺の長さ(_辺2),辺の長さ(_辺3)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),辺の長さ(B),辺の長さ(C)) :- A > B,A > C, A * A =:= B * B + C * C,!. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),辺の長さ(B),辺の長さ(C)) :- B > A,B > C, 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(B),辺の長さ(A),辺の長さ(C)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),辺の長さ(B),辺の長さ(C)) :- C > A,C > B, 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(C),辺の長さ(A),辺の長さ(B)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(ラジアン角度(A),辺の長さ(B),辺の長さ(C)) :- A is pi / 2,!. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),ラジアン角度(B),辺の長さ(C)) :- 'A,B,Cを使って直角三角形が成り立ち真となる関係'(角度(B),辺の長さ(A),辺の長さ(C)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),ラジアン角度(B),辺の角度(C)) :- 'A,B,Cを使って直角三角形が成り立ち真となる関係'(角度(C),辺の長さ(A),辺の長さ(B)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(度数法角度(A),辺の長さ(B),辺の長さ(C)) :- 180.0 is A * 1.0,!. 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),度数法角度(B),辺の長さ(C)) :- 'A,B,Cを使って直角三角形が成り立ち真となる関係'(度数法角度(B),辺の長さ(A),辺の長さ(C)). 'A,B,Cを使って直角三角形が成り立ち真となる関係'(辺の長さ(A),辺の長さ(B),度数法角度(C)) :- 'A,B,Cを使って直角三角形が成り立ち真となる関係'(度数法角度(C),辺の長さ(A),辺の長さ(B)). '三点の座標から辺の長さを得る'((X1,Y1),(X2,Y2),(X3,Y3),_辺1,_辺2,_辺3) :- _辺1 is sqrt((X1-X2) * (X1-X2) + (Y1-Y2) * (Y1-Y2)), _辺2 is sqrt((X1-X3) * (X1-X3) + (Y1-Y3) * (Y1-Y3)), _辺1 is sqrt((X2-X3) * (X2-X3) + (Y2-Y3) * (Y2-Y3)). % 以下のサイトは # # Prologで、 f(X1, X2, X3, X4 ・・・Xn) のX1〜Xnまでダブりがないのを簡単に書く # 方法が絶対にありそうなのに見つからない。X1 \= X2, を延々と書くのは無謀すぎる。 # 関数の引数変数にダブリがない(_関数) :- _関数 =.. [_関数名|_引数リスト], append(L1,[_着目する要素|L2],_引数リスト), append(L1,L2,_着目する要素以外の要素リスト), 変数リストの中に着目する要素と同一変数がある(_着目する要素,_着目する要素以外の要素リスト), !, fail. 関数の引数変数にダブリがない(_). 変数リストの中に着目する要素と同一変数がある(E,[A|R]) :- E == A,!. 変数リストの中に着目する要素と同一変数がある(E,[_|R]) :- 変数リストの中に着目する要素と同一変数がある(E,R). % 以下のサイトは # # Prologで、 f(X1, X2, X3, X4 ・・・Xn) のX1〜Xnまでダブりがないのを簡単に書く # 方法が絶対にありそうなのに見つからない。X1 \= X2, を延々と書くのは無謀すぎる。 # 関数の引数変数にダブリがない(_関数) :- _関数 =.. [_関数名|_引数リスト], select(_着目する要素,_引数リスト,_着目する要素以外の要素リスト), 変数リストの中に着目する要素と同一変数がある(_着目する要素,_着目する要素以外の要素リスト), !, fail. 関数の引数変数にダブリがない(_). 変数リストの中に着目する要素と同一変数がある(E,[A|R]) :- E == A,!. 変数リストの中に着目する要素と同一変数がある(E,[_|R]) :- 変数リストの中に着目する要素と同一変数がある(E,R). % 以下のサイトは # # abcd というPrologのお題が、最終的にa,b,c,dという述語に分割可能だとする。 # その時に、abcd:-abc,d. と abcd:-a,bc,d.とabcd:-ab,cd.とabcd:-a,bcd.と # abcd:-ab,c,d.とabcd:-a,b,cd.とabcd:-a,b,c,d.のどれを選ぶか?何に導かれて選ぶのか? # # 実際の仕様文が「リストに入力して変換した上で整列して出力する」であるとして、 # # 考えてみよう。各パターンの先頭にトップレベルの分割を示す。 # % 詳細化版 % % 共通のデータベース a. b. c. d. %% 分割パターン(1-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- abc, d. abc :- ab, c. ab :- a, b. %% 分割パターン(1-2) %% abcd :- abc, d. abc :- a, bc. bc :- b, c. %% 分割パターン(1-3) %% abcd :- abc, d. abc :- a, b, c. %% 分割パターン(2-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, bc, d. bc :- b, c. %% 分割パターン(3-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して出力する(_変換したリスト). abcd :- ab, bc. ab :- a, b. cd :- c, d. %% 分割パターン(4-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). abcd :- a, bcd. bcd :- bc, d. bc :- b, c. %% 分割パターン(4-2) %% abcd :- a, bcd. bcd :- b, cd. cd :- c, d, %% 分割パターン(4-3) %% abcd :- a, bcd. bcd :- b, c, d. %% 分割パターン(5-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). abcd :- a, b, cd. cd :- c, d. %% 分割パターン(6-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- ab, c, d. ab :- a, b. %% 分割パターン(7-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, c, d. % 以下のサイトは # # abcd というPrologのお題が、最終的にa,b,c,dという述語に分割可能だとする。 # その時に、abcd:-abc,d. と abcd:-a,bc,d.とabcd:-ab,cd.とabcd:-a,bcd.と # abcd:-ab,c,d.とabcd:-a,b,cd.とabcd:-a,b,c,d.のどれを選ぶか?何に導かれて選ぶのか? # # 実際の仕様文が「リストに入力して変換した上で整列して出力する」であるとして、 # # 考えてみよう。各パターンの先頭にトップレベルの分割を示す。 % % 共通のデータベース リストに入力して(_リスト) :- read(_リスト). 変換した上で([],[]). 変換した上で([A|R1],[B|R2]) :- B is A + 10000, 変換した上で(R1,R2). 整列して(_リスト,_整列したリスト) :- sort(_リスト,_整列したリスト). 出力する(_変換した上で整列したリスト) :- writef('%t\n',[_変換した上で整列したリスト]). a. b. c. d. %% 分割パターン(1-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して変換した上(_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). リストに入力して変換した上(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). abcd :- abc, d. abc :- ab, c. ab :- a, b. %% 分割パターン(1-2) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト). リストに入力して変換した上(_変換したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- abc, d. abc :- a, bc. bc :- b, c. %% 分割パターン(1-3) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- abc, d. abc :- a, b, c. %% 分割パターン(2-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). 変換した上で整列して(_リスト,_変換した上で整列したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- a, bc, d. bc :- b, c. %% 分割パターン(3-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して出力する(_変換したリスト). リストに入力して変換した上で(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- ab, bc. ab :- a, b. cd :- c, d. %% 分割パターン(4-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト,_変換した上で整列したリスト) :- 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). 変換した上で整列して(_リスト,_変換した上で整列したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- a, bcd. bcd :- bc, d. bc :- b, c. %% 分割パターン(4-2) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト) :- 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, bcd. bcd :- b, cd. cd :- c, d, %% 分割パターン(4-3) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換したリスト). abcd :- a, bcd. bcd :- b, c, d. %% 分割パターン(5-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, cd. cd :- c, d. %% 分割パターン(6-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). abcd :- ab, c, d. ab :- a, b. %% 分割パターン(7-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, c, d. % 以下のサイトは # @TakaoOzaki 分数の問題と言っていたのはこれです。\ # “@utatakiyoshi: 友達がSkypeで # 「0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ」って # 算数パズルを出してきたからC++でサクッと書いてドヤ顔してやった” # '0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ'(X/Y) :- 順列([0,2,3,4,5,6,7,8],8,[B,C,D,E,G,H,I,J]), X is 1 * 10000 + B * 1000 + C * 100 + D * 10 + E, Y is 9 * 10000 + G * 1000 + H * 100 + I * 10 + J, 9 is Y // X, 0 is Y mod X. 順列(Y,0,[]). 順列(Y,N,[A|X]) :- del(A,Y,Z), M is N - 1, 順列(Z,M,X). del(A,[A|X],X). del(A,[B|X],[B|Y]) :- del(A,X,Y). % 以下のサイトは # @TakaoOzaki 分数の問題と言っていたのはこれです。\ # “@utatakiyoshi: 友達がSkypeで # 「0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ」って # 算数パズルを出してきたからC++でサクッと書いてドヤ顔してやった” # '0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ'(X/Y) :- 検査用の型を用意する(Lx,Lz), between(1,11111,X), 重複しない数(X,Lx,[],L1), Y is X * 9, 重複しない数(Y,Lz,L1,L2). 検査用の型を用意する(Lx,Lz) :- length(Lx,5), length(Lz,10). 重複しない数(X,Lx,L1,L2) :- number_chars(X,L), append(L1,L,L2), sort(L2,Lx). % 以下のサイトは # @TakaoOzaki 分数の問題と言っていたのはこれです。\ # “@utatakiyoshi: 友達がSkypeで # 「0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ」って # 算数パズルを出してきたからC++でサクッと書いてドヤ顔してやった” # '0~9を1回ずつ使い,?????/?????=1/9となるように?を埋めよ'(X/Y) :- 検査用の型を用意する(Lx,Lz), 分子検査の開始点と終了点を得る(_開始点,_終了点), between(_開始点,_終了点,X), 重複しない数(X,Lx,[],L1), Y is X * 9, 重複しない数(Y,Lz,L1,L2). 検査用の型を用意する(Lx,Lz) :- length(Lx,5), length(Lz,10). 分子検査の開始点と終了点を得る(_開始点,_終了点) :- _開始点 is 10000 // 9, _終了点 is 99999 // 9. 重複しない数(X,Lx,L1,L2) :- number_chars(X,L), append(L1,L,L2), sort(L2,Lx). % 以下のサイトは # twitter_by_@yumu_sci 2012/6/28 # Prologでジョークを言ってもPrologを知っている人にしか伝わらないのは、 # 日本語でジョークを言っても日本語が解る人にしか伝わらないのと同じか ' @yumu_sci さんによる、Prologでジョークを、の話。私はそちらのセンスがないから、過去定義した述語を振り返ってもさっぱり。でも、居酒屋なんかで回りの音を拾えば、_冗談_1 × _冗談_2 × _冗談_3 × ・・・ 反省してしまいます。'. % 以下のサイトは # @TakaoOzaki リプありがとうございます。 # XはYの兄弟(姉妹や兄妹なども含む)である。というものを作りたいのですが、 # 兄弟(X,Y):=親(Z,X),親(Z,Y).とすると # 兄弟(私,X).としたときにX=私と解が出てしまいどうすればいいか # 試行錯誤していたところです。 親(道隆,伊周). 親(道隆,定子). 親(貴子,伊周). 親(貴子,定子). 私は誰でしょう(定子). 兄弟(私,Y) :- 私は誰でしょう(_私), 兄弟(_私,Y). 兄弟(X,Y) :- \+(X = 私), 親(Z,X), 親(Z,Y), \+(X = Y). % ?- 兄弟(私,Y). % % Y = '伊周'; % Y = '伊周'; % False % % ?- % 以下のサイトは # # @kamizen1 @sym_num 最初の述語は多分こんな感じ。 http://nojiriko.asia/prolog/twitter_by_kamizen1_20121109.html … 実行して確かめてはいないけれど。 # % ?- hir_zen( 'う゛おう゛う゛お---;;;;,,,,...', P ). の様に使う。ひらがな -> 全角カタカナ (ひらがな ではない文字は、素通りします。) hir_zen( _文字列, _変換後 ) :- /* ここが質問のはじめ : main() */ atom(_文字列), atom_chars( _文字列, _処理前リスト ), hir_zen_henkan( _処理前リスト, _処理後リスト ), atom_chars( _変換後, _処理後リスト ). hir_zen( _変換後, _文字列 ) :- /* ここが質問のはじめ : main() */ atom(_文字列), var(_変換後), atom_chars( _文字列, _処理前リスト ), hir_zen_henkan( _処理後リスト,_処理前リスト ), atom_chars( _変換後, _処理後リスト ). hir_zen_henkan( [], [] ). /* 停止判定 */ hir_zen_henkan( [A,B|L], ['ヴ'|Z] ) :- /* _処理前リストの最初の2文字が 'う', '゛' の場合 */ atom_chars('う゛', V), V=[A,B], !, hir_zen_henkan( L, Z ). hir_zen_henkan(L1, [ZZ|Z]) :- /* _処理前リストの最初の1文字が、hir( **リスト** ). にある場合 */ \+(var(L1)), L1 = [A|L], hir( Hira ), nth1( N, Hira, A ), zen( Zen ), nth1( N, Zen, ZZ ), !, hir_zen_henkan( L, Z ). hir_zen_henkan(L1, L2) :- /* _処理前リストの最初の1文字が、hir( **リスト** ). にある場合 */ var(L1), \+(var(L2)), L2 = [ZZ|Z], L1 = [A|L], zen( Zen ), nth1( N, Zen, ZZ ), hir( Hira ), nth1( N, Hira, A ), !, hir_zen_henkan( L, Z ). hir_zen_henkan( [A|L], [A|Z] ) :- /* _処理前リストの最初の1文字が、hir( **リスト** ). にない場合 */ !, hir_zen_henkan( L, Z ). % 以下のサイトは # @student_neet # Prologでabcdの積み木が順に重なっており、on(a,b). on(b,c). on(c,d). touch(X,Y) :- on(X,Y). touch(X,Y) :- on(Y,X). % % Prologでabcdの積み木が順に重なっており、 % % on(a,b). % on(b,c). % on(c,d). % % touch(X,Y) :- on(X,Y). % touch(X,Y) :- on(Y,X). 上にある(a,b). 上にある(b,c). 上にある(c,d). 接している(_1,_2) :- 上にある(_1,_2). 接している(_1,_2) :- 上にある(_2,_1). % 以下のサイトは # @nishio # Prologでfoo([t, f], 3, RET)とかやったらRETが[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語fooの作り方に悩んでいる # 'Prologでfoo([t, f], 3, RET)とかやったらRETが[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語fooの作り方に悩んでいる'(_要素リスト,N,RET) :- foo(_要素リスト,N,RET). foo(_要素リスト,N,RET) :- findall(L,foo_1(N,_要素リスト,L),RET). foo_1(0,_,[]). foo_1(N,_要素リスト,[_要素|R]) :- N > 0, member(_要素,_要素リスト), N_1 is N - 1, foo_1(N_1,_要素リスト,R). % 以下のサイトは # @nishio # Prologでfoo([t, f], 3, RET)とかやったらRETが[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語fooの作り方に悩んでいる # 'Prologでfoo([t, f], 3, RET)とかやったらRETが[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語fooの作り方に悩んでいる'(_要素リスト,N,RET) :- foo(_要素リスト,N,RET). foo(_要素リスト,N,RET) :- findall(L,foo_1(N,_要素リスト,L),RET). foo_1(0,_,[]). foo_1(N,_要素リスト,[_要素|R]) :- N > 0, member(_要素,_要素リスト), N_1 is N - 1, foo_1(N_1,_要素リスト,R). % 以下のサイトは # Prolog 21世紀における0〜3の数字を2個ずつ使ってできる年月日の個数 # # 【出典】https://twitter.com/c_oi/status/301346035094126593 # https://twitter.com/c_oi/status/301346039590436864 # 【引用】「0〜3の数字を2個ずつ使ってできる年月日は21世紀(2001/01/01〜2100/12/31)の間に何日間あるでしょう?」 # '21世紀における0〜3の数字を2個ずつ使ってできる年月日の個数'(_個数) :- setof(_年月日ならび,( 重複を許す年月日ならびの選択(_年月日ならび)), LL), length(LL,_個数). 重複を許す年月日ならびの選択(_年月日ならび) :- 順列([0,0,1,1,2,2,3,3],8,_年月日ならび), _年月日ならび @>= [2,0,0,1,0,1,0,1], _年月日ならび @=< [2,1,0,0,1,2,3,1], \+(禁則(_年月日ならび)). 禁則([_,_,_,_,0,2,3,_]) :- !. 禁則([_,_,_,_,2,_,_,_]) :- !. 禁則([_,_,_,_,3,_,_,_]) :- !. 禁則([_,_,_,_,1,3,_,_]) :- !. 禁則([_,_,_,_,_,_,3,3]) :- !. 禁則([_,_,_,_,_,_,3,2]) :- !. 順列(Y,0,[]). 順列(Y,N,[A|X]) :- del(A,Y,Z), M is N - 1, 順列(Z,M,X). del(A,[A|X],X). del(A,[B|X],[B|Y]) :- del(A,X,Y). % 以下のサイトは # @emtg_unlimitedさんの20130425のtwitterより # # 一人暮らしの味方の食品で打順組んだ # # 1(中)お好み焼き # 2(二)惣菜 # 3(左)卵 # 4(三)カップ麺 # 5(右)カレー # 6(一)焼きそば # 7(遊)米 # 8(捕)もやし # 9(投)インスタント麺 一人暮らしの味方の食品で打順組んだ(_打順,_守備位置,_一人暮らしの味方の食品) :- 一人暮らしの味方の食品で組んだ打順(_打順,_守備位置,_一人暮らしの味方の食品). 一人暮らしの味方の食品で組んだ打順(1,中,お好み焼き). 一人暮らしの味方の食品で組んだ打順(2,二,惣菜). 一人暮らしの味方の食品で組んだ打順(3,左,卵). 一人暮らしの味方の食品で組んだ打順(4,三,カップ麺). 一人暮らしの味方の食品で組んだ打順(5,右,カレー). 一人暮らしの味方の食品で組んだ打順(6,一,焼きそば). 一人暮らしの味方の食品で組んだ打順(7,遊,米). 一人暮らしの味方の食品で組んだ打順(8,捕,もやし). 一人暮らしの味方の食品で組んだ打順(9,投,インスタント麺). % 以下のサイトは # @deep_verdure氏のツイートから # # @deep_verdure # linearsearch(_,[]) :- fail. # linearsearch(X,[Y|Z]) :- (Y=X)->format('find!!');linearsearch(X,Z). # # 線形探索にすら再帰が必要な時点で自分はPrologを敵とみなした 線形探索(X,[Y|Z]) :- X = Y, format('find!!'),!. 線形探索(X,[_|Z]) :- 線形探索(X,Z). 線形探索(L,_前,X,_後) :- append(_前,[X|_後],L). % 以下のサイトは # @seagull_kamome:のtwitter(20130630)に思いめぐらし # # sleep 1 unless x=0 # より # # if (x = 0) { # } else { # sleep 1; # } # # の方が読みやすいといっている変態の脳味噌を一度解剖してみたいわ 'sleep 1 unless x=0'(_x) :- 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x). 'if (x = 0) { } else { sleep 1; }'(_x) :- 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x). 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x) :- xが0以外の時(_x), sleep(1). 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x) :- xが0の時(_x). xが0以外の時(_x) :- \+(_x=0). xが0の時(_x) :- _x = 0. % 以下のサイトは # @seagull_kamome:のtwitter(20130630)に思いめぐらし # # sleep 1 unless x=0 # より # # if (x = 0) { # } else { # sleep 1; # } # # の方が読みやすいといっている変態の脳味噌を一度解剖してみたいわ 'sleep 1 unless x=0'(_x) :- 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x). 'if (x = 0) { } else { sleep 1; }'(_x) :- 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x). 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x) :- xが0以外の時(_x), '1単位停止し'. 'xが0以外の時、1単位停止し、xが0の時は何もしない'(_x) :- xが0の時(_x), 何もしない. xが0以外の時(_x) :- \+(_x=0). xが0の時(_x) :- _x = 0. '1単位停止し' :- sleep(1). 何もしない. % 以下のサイトは 'do { 質問 x = 答え }while(教官の求める答え(x));'(_x) :- 教官の気に入った答えをするまで質問される(_x). 教官の気に入った答えをするまで質問される(_答え) :- 質問(_質問), 答え(_質問,_答え), 教官の気に入った答え(_質問,_答え). % 以下のサイトは # Prolog問題: http://nojiriko.asia/prolog/olympic.html # をCopy&Pasteしてあなたの環境に 夏季オリンピック/2 と 冬季オリンピック/2 を # 定義した上で、述語 オリンピック/2 を夏季、冬季オリンピック混在して、 # 開催年の古い順に節定義せよ。 '夏季オリンピック/2 と 冬季オリンピック/2 を 定義した上で、述語 オリンピック/2 を夏季、冬季オリンピック混在して、 開催年の古い順に節定義せよ。' :- '述語 オリンピック/2 を夏季、冬季オリンピック混在して、'(LL1), 開催年の古い順に節定義せよ(LL1). '述語 オリンピック/2 を夏季、冬季オリンピック混在して、'(LL1) :- findall([_年,_都市],( 夏季オリンピック(_年,_都市); 冬季オリンピック(_年,_都市)), LL1). 開催年の古い順に節定義せよ(LL1) :- sort(LL1,LL2), forall((member([_年,_都市],LL2),assertz(オリンピック(_年,_都市))). 夏季オリンピック(1896,アテネ). 夏季オリンピック(1900,パリ). 夏季オリンピック(1904,セントルイス). 夏季オリンピック(1906,アテネ). 夏季オリンピック(1908,ロンドン). 夏季オリンピック(1912,ストックホルム). 夏季オリンピック(1920,アントワープ). 夏季オリンピック(1924,パリ). 夏季オリンピック(1928,アムステルダム). 夏季オリンピック(1932,ロサンジェルス). 夏季オリンピック(1936,ベルリン). 夏季オリンピック(1948,ロンドン). 夏季オリンピック(1952,ヘルシンキ). 夏季オリンピック(1956,メルボルン). 夏季オリンピック(1960,ローマ). 夏季オリンピック(1964,東京). 夏季オリンピック(1968,メキシコシチー). 夏季オリンピック(1972,ミュンヘン). 夏季オリンピック(1976,モントリオール). 夏季オリンピック(1980,モスクワ). 夏季オリンピック(1984,ロサンジェルス). 夏季オリンピック(1988,ソウル). 夏季オリンピック(1992,バルセロナ). 夏季オリンピック(1996,アトランタ). 夏季オリンピック(2000,シドニー). 夏季オリンピック(2004,アテネ). 夏季オリンピック(2008,北京). 夏季オリンピック(2012,ロンドン). 冬季オリンピック(1924,シャモニー). 冬季オリンピック(1928,サンモリッツ). 冬季オリンピック(1932,レークプラシッド). 冬季オリンピック(1936,ガルミッシュパルテンキルヒェン). 冬季オリンピック(1948,サンモリッツ). 冬季オリンピック(1952,オスロ). 冬季オリンピック(1956,コルティナダンペッツォ). 冬季オリンピック(1960,スコーバレー). 冬季オリンピック(1964,インスブルック). 冬季オリンピック(1968,グルノーブル). 冬季オリンピック(1972,札幌). 冬季オリンピック(1976,インスブルック). 冬季オリンピック(1980,レークプラシッド). 冬季オリンピック(1984,サラエボ). 冬季オリンピック(1988,カルガリー). 冬季オリンピック(1992,アルベールビル). 冬季オリンピック(1994,リレハンメル). 冬季オリンピック(1998,長野). 冬季オリンピック(2002,ソルトレイクシティ). 冬季オリンピック(2006,トリノ). 冬季オリンピック(2010,バンクーバー). % 以下のサイトは # Prolog問題: http://nojiriko.asia/prolog/olympic.html # をCopy&Pasteしてあなたの環境に 夏季オリンピック/2 と 冬季オリンピック/2 を # 定義した上で、述語 オリンピック/3 を夏季、冬季オリンピック混在して、 # 開催年の古い順に節定義せよ。 '夏季オリンピック/2 と 冬季オリンピック/2 を定義した上で、述語 オリンピック/3 を夏季、冬季オリンピック混在して、開催年の古い順に節定義せよ。' :- '述語 オリンピック/3 を夏季、冬季オリンピック混在して、'(LL1), 開催年の古い順に節定義せよ(LL1). '述語 オリンピック/3 を夏季、冬季オリンピック混在して、'(LL1) :- findall([_年,_冬季または夏季,_都市],( 夏季オリンピック(_年,_都市), _冬季または夏季=夏季; 冬季オリンピック(_年,_都市), _冬季または夏季=冬季), LL1). 開催年の古い順に節定義せよ(LL1) :- sort(LL1,LL2), forall(member([_年,_冬季または夏季,_都市],LL2),assertz(オリンピック(_冬季または夏季,_年,_都市))). 夏季オリンピック(1896,アテネ). 夏季オリンピック(1900,パリ). 夏季オリンピック(1904,セントルイス). 夏季オリンピック(1906,アテネ). 夏季オリンピック(1908,ロンドン). 夏季オリンピック(1912,ストックホルム). 夏季オリンピック(1920,アントワープ). 夏季オリンピック(1924,パリ). 夏季オリンピック(1928,アムステルダム). 夏季オリンピック(1932,ロサンジェルス). 夏季オリンピック(1936,ベルリン). 夏季オリンピック(1948,ロンドン). 夏季オリンピック(1952,ヘルシンキ). 夏季オリンピック(1956,メルボルン). 夏季オリンピック(1960,ローマ). 夏季オリンピック(1964,東京). 夏季オリンピック(1968,メキシコシチー). 夏季オリンピック(1972,ミュンヘン). 夏季オリンピック(1976,モントリオール). 夏季オリンピック(1980,モスクワ). 夏季オリンピック(1984,ロサンジェルス). 夏季オリンピック(1988,ソウル). 夏季オリンピック(1992,バルセロナ). 夏季オリンピック(1996,アトランタ). 夏季オリンピック(2000,シドニー). 夏季オリンピック(2004,アテネ). 夏季オリンピック(2008,北京). 夏季オリンピック(2012,ロンドン). 冬季オリンピック(1924,シャモニー). 冬季オリンピック(1928,サンモリッツ). 冬季オリンピック(1932,レークプラシッド). 冬季オリンピック(1936,ガルミッシュパルテンキルヒェン). 冬季オリンピック(1948,サンモリッツ). 冬季オリンピック(1952,オスロ). 冬季オリンピック(1956,コルティナダンペッツォ). 冬季オリンピック(1960,スコーバレー). 冬季オリンピック(1964,インスブルック). 冬季オリンピック(1968,グルノーブル). 冬季オリンピック(1972,札幌). 冬季オリンピック(1976,インスブルック). 冬季オリンピック(1980,レークプラシッド). 冬季オリンピック(1984,サラエボ). 冬季オリンピック(1988,カルガリー). 冬季オリンピック(1992,アルベールビル). 冬季オリンピック(1994,リレハンメル). 冬季オリンピック(1998,長野). 冬季オリンピック(2002,ソルトレイクシティ). 冬季オリンピック(2006,トリノ). 冬季オリンピック(2010,バンクーバー). % 以下のサイトは # @tsukada816: # Prologの実験中。appendとmemberを教えて、 # リストから指定した要素を取り除くdeleteを作れと問題を出した。 # 'Prologの実験中。appendとmemberを教えて、リストから指定した要素を取り除くdeleteを作れと問題を出した。'(_リスト,_取り除く要素,_指定した要素を取り除いたリスト) :- delete(_リスト,_取り除く要素,_指定した要素を取り除いたリスト). delete(_リスト,_取り除く要素,_指定した要素を取り除いたリスト) :- append(_前方リスト,[_取り除く要素|_後方リスト],_リスト), delete(_後方リスト,_取り除く要素,_指定した要素を取り除いた後方リスト), append(_前方リスト,_指定した要素を取り除いた後方リスト,_指定した要素を取り除いたリスト),!. delete(_リスト,_,_リスト). % 以下のサイトは # @tsukada816: # Prologの実験中。appendとmemberを教えて、 # リストから指定した要素を取り除くdeleteを作れと問題を出した。 # 'Prologの実験中。appendとmemberを教えて、リストから指定した要素を取り除くdeleteを作れと問題を出した。'(_リスト,_取り除く要素,_指定した要素を取り除いたリスト) :- delete(_リスト,_取り除く要素,_指定した要素を取り除いたリスト). delete(_リスト,_取り除く要素,_指定した要素を取り除いたリスト) :- append(_前方リスト,[_取り除く要素|_後方リスト],_リスト), append(_前方リスト,_後方リスト,_指定した要素を取り除いたリスト). % 以下のサイトは # @tsukada816: # Prologの実験中。appendとmemberを教えて、 # リストから指定した要素を取り除くdeleteを作れと問題を出した。 # 'Prologの実験中。appendとmemberを教えて、リストから指定した要素を取り除くdeleteを作れと問題を出した。'(_リスト,_取り除く要素リスト,_指定した要素を取り除いたリスト) :- delete(_リスト,_取り除く要素リスト,_指定した要素を取り除いたリスト). delete([],_取り除く要素リスト,[]). delete([_取り除く要素|_残りリスト],_取り除く要素リスト,_指定した要素を取り除いたリスト) :- member(_取り除く要素,_取り除く要素リスト), delete(_残りリスト,_取り除く要素リスト,_指定した要素を取り除いたリスト),!. delete([_要素|_残りリスト],_取り除く要素リスト,[_要素|_指定した要素を取り除いたリスト]) :- delete(_残りリスト,_取り除く要素リスト,_指定した要素を取り除いたリスト). % 以下のサイトは % % @Di_GlassさんによるFizzBuzz % % 2013/11/04 fizzbuzz(0). fizzbuzz(N):-N1 is N-1, F is N/3, integer(F), B is N/5, integer(B), fizzbuzz(N1), print('FizzBuzz'),nl. fizzbuzz(N):-N1 is N-1, F is N/3, integer(F), fizzbuzz(N1), print('Fizz'),nl. fizzbuzz(N):-N1 is N-1, F is N/5, integer(F), fizzbuzz(N1), print('Buzz'),nl. fizzbuzz(N):-N1 is N-1, fizzbuzz(N1), print(N),nl. % 以下のサイトは # @nagoya313 # # 東横準急 # 元町・中華街 # 日本大通り # 馬車道 # みなとみらい # 横濱 # 白樂 # 菊名 # 綱島 # 日吉 # 武藏小杉 # 多摩川 # 田園調布 # 自由が丘 # 都立大學 # 學藝大學 # 祐天寺 # 中目黒 # 代官山 # 澁谷 # 東横準急('元町・中華街'). 東横準急(日本大通り). 東横準急(馬車道). 東横準急(みなとみらい). 東横準急(横濱). 東横準急(白樂). 東横準急(菊名). 東横準急(綱島). 東横準急(日吉). 東横準急(武藏小杉). 東横準急(多摩川). 東横準急(田園調布). 東横準急(自由が丘). 東横準急(都立大學). 東横準急(學藝大學). 東横準急(祐天寺). 東横準急(中目黒). 東横準急(代官山). 東横準急(澁谷). 東横準急('元町・中華街',日本大通り). 東横準急(日本大通り,馬車道). 東横準急(馬車道,みなとみらい). 東横準急(みなとみらい,横濱). 東横準急(横濱,白樂). 東横準急(白樂,菊名). 東横準急(菊名,綱島). 東横準急(綱島,日吉). 東横準急(日吉,武藏小杉). 東横準急(武藏小杉,多摩川). 東横準急(多摩川,田園調布). 東横準急(田園調布,自由が丘). 東横準急(自由が丘,都立大學). 東横準急(都立大學,學藝大學). 東横準急(學藝大學,祐天寺). 東横準急(祐天寺,中目黒). 東横準急(中目黒,代官山). 東横準急(代官山,澁谷). % 以下のサイトは # 以下の引用は笹川さんのプログです。 # http://scmblog.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/prolog%E3%82%AA%E3%82%B8%E3%82%B5%E3%83%B3%E3%81%AB%E6%8D%A7%E3%81%90 # # Prologオジサンに捧ぐ # 私もProlog好きなオジサンなのですが、もうこれはすごいってくらいの筋金入りのPrologオジサンがいます。 # # 昭和57年頃に第五世代コンピューター計画というものがありまして、大規模な国家プロジェクトでした。そこで採用されたベースになる言語がPrologでした。私は、ひどく知的ショックを受けました。なぜLispやSchemeに手を伸ばしたかというとすべてはPrologを理解し、動かすためでした。 # # NormalにはPrologの拡張機能があります。VMにWAM(ウォーレンさんの抽象マシン)を参考にしたProlog用の命令が含まれています。まだまだ改良の余地があるのですが、おおよその動作はするようになっています。 # # 例えば # # (assert (&subset () ())) # (assert (&subset (_f . _r) (_f . _s)) # (&subset _r _s)) # (assert (&subset (_f . _r) _s) # (&subset _r _s)) # # これは集合の部分集合を求めるものです。 # # こんな風に動作します。 # # norm> (&subset (1 2 3) _x) # _x = (1 2 3) # ; # _x = (1 2) # ; # _x = (1 3) # ; # _x = (1) # ; # _x = (2 3) # ; # _x = (2) # ; # _x = (3) # ; # _x = () # ; # #f # norm> # # # 竹内先生たちの開発したTAOがLispとPrologのハイブリッドでした。あちらはさらにオブジェクト指向まで取り込んでまさしく鵺のようでした。 # # # PrologとSchemeは私にとってなくてはならない言語たちです。二つをうまく取り込めたことを自慢に思っています。 # # どうぞ、Normalで遊んでください。Prologはとてもとても面白い言語です。 # subset([],[]). subset([_f|_r],[_f|_s]) :- subset(_r,_s). subset([_f|_r],_s) :- subset(_r,_s). 部分集合([],[]). 部分集合(L1,L2) :- 第二要素以下による全ての部分集合候補の先頭に第一要素を付加する(L1,L2). 部分集合(L1,L2) :- 先頭要素を削り一要素少なくなった集合の全ての部分集合候補を得る(L1,L2). 第二要素以下による全ての部分集合候補の先頭に第一要素を付加する([_第一要素|_第二要素以下],[_第一要素|_第二要素以下による全ての部分集合候補]) :- 部分集合(_第二要素以下,_第二要素以下による全ての部分集合候補). 先頭要素を削り一要素少なくなった集合の全ての部分集合候補を得る([_|_一要素少なくなった集合],_一要素少なくなった集合の全ての部分集合候補) :- 部分集合(_一要素少なくなった集合,_一要素少なくなった集合の全ての部分集合候補). % 以下のサイトは # 以下の引用は笹川さんのプログです。 # http://scmblog.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/prolog%E3%82%AA%E3%82%B8%E3%82%B5%E3%83%B3%E3%81%AB%E6%8D%A7%E3%81%90 # # Prologオジサンに捧ぐ # 私もProlog好きなオジサンなのですが、もうこれはすごいってくらいの筋金入りのPrologオジサンがいます。 # # 昭和57年頃に第五世代コンピューター計画というものがありまして、大規模な国家プロジェクトでした。そこで採用されたベースになる言語がPrologでした。私は、ひどく知的ショックを受けました。なぜLispやSchemeに手を伸ばしたかというとすべてはPrologを理解し、動かすためでした。 # # NormalにはPrologの拡張機能があります。VMにWAM(ウォーレンさんの抽象マシン)を参考にしたProlog用の命令が含まれています。まだまだ改良の余地があるのですが、おおよその動作はするようになっています。 # # 例えば # # (assert (&subset () ())) # (assert (&subset (_f . _r) (_f . _s)) # (&subset _r _s)) # (assert (&subset (_f . _r) _s) # (&subset _r _s)) # # これは集合の部分集合を求めるものです。 # # こんな風に動作します。 # # norm> (&subset (1 2 3) _x) # _x = (1 2 3) # ; # _x = (1 2) # ; # _x = (1 3) # ; # _x = (1) # ; # _x = (2 3) # ; # _x = (2) # ; # _x = (3) # ; # _x = () # ; # #f # norm> # # # 竹内先生たちの開発したTAOがLispとPrologのハイブリッドでした。あちらはさらにオブジェクト指向まで取り込んでまさしく鵺のようでした。 # # # PrologとSchemeは私にとってなくてはならない言語たちです。二つをうまく取り込めたことを自慢に思っています。 # # どうぞ、Normalで遊んでください。Prologはとてもとても面白い言語です。 # subset([],[]). subset([_f|_r],[_f|_s]) :- subset(_r,_s). subset([_f|_r],_s) :- subset(_r,_s). 部分集合([],[]). 部分集合(L1,L2) :- 第二要素以下による全ての部分集合候補の先頭に第一要素を付加する(L1,L2). 部分集合(L1,L2) :- 先頭要素を削り一要素少なくなった集合の全ての部分集合候補を得る(L1,L2). 第二要素以下による全ての部分集合候補の先頭に第一要素を付加する([_第一要素|_第二要素以下],[_第一要素|_第二要素以下による全ての部分集合候補]) :- 部分集合(_第二要素以下,_第二要素以下による全ての部分集合候補). 先頭要素を削り一要素少なくなった集合の全ての部分集合候補を得る([_|_一要素少なくなった集合],_一要素少なくなった集合の全ての部分集合候補) :- 部分集合(_一要素少なくなった集合,_一要素少なくなった集合の全ての部分集合候補). % 以下のサイトは # @1to100pen: # git grep -e abc --and -e 123 で「abc」と「123」が順不同で両方が現れる行を検索できる --and オプションを知った。(grepコマンドでは grep abc | grep 123 みたいにしないとできない) 'git grep -e abc --and -e 123 で「abc」と「123」が順不同で両方が現れる行を検索できる'(_文字列) :- sub_atom(_文字列,_,_,_,'abc'), sub_atom(_文字列,_,_,_,'123'). % 以下のサイトは # @sxmx317: # 【数学】ある細胞がビンの中に1個入っています。この細胞は1分間に2倍に増殖 # します(1分後に2個、2分後に4個、以下同じ)。 # # 1時間後にちょうどビンが一杯になります。 # では、細胞の量がビンの半分になるのは、 # 今から何分後でしょう? 'ある細胞がビンの中に1個入っています。この細胞は1分間に2倍に増殖 します(1分後に2個、2分後に4個、以下同じ)。 1時間後にちょうどビンが一杯になります。 では、細胞の量がビンの半分になるのは、今から何分後でしょう?'(_何分後) :- '細胞が1分間に2倍に増殖するということは、増殖した1分前には半分だったということだ'(60,_何分後). '細胞が1分間に2倍に増殖するということは、増殖した1分前には半分だったということだ'(_増殖を始めてからの経過時間,_何分後) :- _何分後 is _増殖を始めてからの経過時間 - 1. % 以下のサイトは # twitter_by_@102m4_20131128 'わかった、じゃあ数字をいれるとその文字数だけ寿限無を表示するプログラミングをつくる'(_数字) :- 寿限無(_寿限無), sub_atom(_寿限無,0,_数字,_,_文字数だけ寿限無を), writef('%t\n',[_文字数だけ寿限無を]). 寿限無(じゅげむじゅげむごこうのすりきれかいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじのぶらこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーのちょうきゅうめいのちょうすけ). % 「わかった、じゃあ数字をいれる」を変更 % 「その数詞の文字数だけ寿限無を」を変更(1) % 「その数詞の文字数だけ寿限無を」を変更(2) % 以下のサイトは # twitter_by_@102m4_20131128 'わかった、じゃあ数字をいれるとその文字数だけ寿限無を表示するプログラミングをつくる' :- 'わかった、じゃあ数字をいれると'(_数字), その文字数だけ寿限無を(_数字,_その文字数だけ寿限無を), 表示する(_その文字数だけ寿限無を). 'わかった、じゃあ数字をいれると'(_数字) :- 整数を得る('わかった、じゃあ数字をいれて ',_数字 > 0,_数字). その文字数だけ寿限無を(_数字,_その文字数だけ寿限無を) :- 寿限無(_寿限無), sub_atom(_寿限無,0,数字,_,_その文字数だけ寿限無を). 寿限無(じゅげむじゅげむごこうのすりきれかいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじのぶらこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーのちょうきゅうめいのちょうすけ). 表示する(_文字数だけ寿限無を) :- writef('%t\n',[_文字数だけ寿限無を]). % 「数字をいれる」は引数から % 「その数詞の文字数だけ寿限無を」を変更(1) % 「その数詞の文字数だけ寿限無を」を変更(2) % 以下のサイトは # twitter_by_@102m4_20131128 'わかった、じゃあ数字をいれるとその文字数だけ寿限無を表示するプログラミングをつくる' :- 'わかった、じゃあ数字をいれると'(_数字), その文字数だけ寿限無を(_数字,_その文字数だけ寿限無を), 表示する(_その文字数だけ寿限無を). 'わかった、じゃあ数字をいれると'(_数字) :- 整数を得る('わかった、じゃあ数字をいれて ',_数字 > 0,_数字). その文字数だけ寿限無を(_文字数,_その文字数だけ寿限無を) :- freeze(_寿限無,sub_atom(_寿限無,0,_文字数,_,_その文字数だけ寿限無を)), 寿限無(_寿限無). 寿限無(じゅげむじゅげむごこうのすりきれかいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじのぶらこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーのちょうきゅうめいのちょうすけ). 表示する(_文字数だけ寿限無を) :- writef('%t\n',[_文字数だけ寿限無を]). % 「数字をいれる」は引数から % 「その数詞の文字数だけ寿限無を」を変更(1) % 「その数詞の文字数だけ寿限無を」を変更(2) % 以下のサイトは # twitter_by_@102m4_20131128 'わかった、じゃあ数字をいれるとその文字数だけ寿限無を表示するプログラミングをつくる' :- 'わかった、じゃあ数字をいれると'(_数字), その文字数だけ寿限無を(_数字,_その文字数だけ寿限無を), 表示する(_その文字数だけ寿限無を). 'わかった、じゃあ数字をいれると'(_数字) :- 整数を得る('わかった、じゃあ数字をいれて ',_数字 > 0,_数字). その文字数だけ寿限無を(_文字数,_その文字数だけ寿限無を) :- 寿限無をその文字数だけ(_文字数,_その文字数だけ寿限無を). 寿限無をその文字数だけ(_文字数,_その文字数だけ寿限無を) :- 寿限無(_寿限無を), sub_atom(_寿限無を,0,_文字数,_,_その文字数だけ寿限無を). 寿限無(じゅげむじゅげむごこうのすりきれかいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじのぶらこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーのちょうきゅうめいのちょうすけ). 表示する(_表示対象) :- writef('%t\n',[_表示対象]). % 「数字をいれる」は引数から % 「その数詞の文字数だけ寿限無を」を変更(1) % 「その数詞の文字数だけ寿限無を」を変更(2) % 以下のサイトは # twitter_by_@ketcho0o_20131129 # # excelで仕事割出すやつ作ったけど、javaで作った方がよかったかなあ。 # むしろバンド名質問してそれに属する人達を除いたセクションメンバーを表示するってことでprologで作れたらかっこいいね。 セクションメンバー(ビートルズ,'ジョン・レノン'). セクションメンバー(ビートルズ,'ポール・マッカートニー'). セクションメンバー(ビートルズ,'ジョージ・ハリスン'). セクションメンバー(ビートルズ,'リンゴ・スター'). セクションメンバー(クラッシュ,'ジョー・ストラマー'). セクションメンバー(クラッシュ,'ミック・ジョーンズ'). セクションメンバー(クラッシュ,'ポール・シムノン'). セクションメンバー(クラッシュ,'トッパー・ヒードン'). 'バンド名質問してそれに属する人達を除いたセクションメンバーを表示する' :- write('バンド名は '), read(_バンド名), forall(それに属する人達を除いたセクションメンバーを(_バンド名,_セクション,_メンバー),表示する(_セクション,_メンバー)). それに属する人達を除いたセクションメンバーを(_バンド名,_セクション,_メンバー) :- セクションメンバー(_セクション,_メンバー), \+(_セクション = _バンド名). 表示する(_セクション,_メンバー) :- writef('%t,%t\n',[_セクション,_メンバー]). % 参考 % 以下のサイトは # twitter_by_@ketcho0o_20131129 # # excelで仕事割出すやつ作ったけど、javaで作った方がよかったかなあ。 # むしろバンド名質問してそれに属する人達を除いたセクションメンバーを表示するってことでprologで作れたらかっこいいね。 セクションメンバー(ビートルズ,'ジョン・レノン'). セクションメンバー(ビートルズ,'ポール・マッカートニー'). セクションメンバー(ビートルズ,'ジョージ・ハリスン'). セクションメンバー(ビートルズ,'リンゴ・スター'). セクションメンバー(クラッシュ,'ジョー・ストラマー'). セクションメンバー(クラッシュ,'ミック・ジョーンズ'). セクションメンバー(クラッシュ,'ポール・シムノン'). セクションメンバー(クラッシュ,'トッパー・ヒードン'). 'バンド名質問してそれに属する人達を除いたセクションメンバーを表示する' :- バンド名質問して(_バンド名), それに属する人達を除いたセクションメンバーを表示する(_バンド名). バンド名質問して(_バンド名) :- write('バンド名は '), read(_バンド名). それに属する人達を除いたセクションメンバーを表示する(_バンド名) :- forall(それに属する人達を除いたセクションメンバーを(_バンド名,_セクション,_メンバー), 表示する(_セクション,_メンバー)). それに属する人達を除いたセクションメンバーを(_バンド名,_セクション,_メンバー) :- セクションメンバー(_セクション,_メンバー), \+(_セクション = _バンド名). 表示する(_セクション,_メンバー) :- writef('%t,%t\n',[_セクション,_メンバー]). % 参考 % 以下のサイトは # H. Hosaka @H_H: # [算数][問題] H君は10万円を持って銀行に行き、50枚のお札に両替してもらいました。H君は千円札、二千円札、五千円札、一万円札を何枚受け取ったでしょうか?あり得る可能性を全て答えなさい。 '[算数][問題] H君は10万円を持って銀行に行き、50枚のお札に両替してもらいました。H君は千円札、二千円札、五千円札、一万円札を何枚受け取ったでしょうか?あり得る可能性を全て答えなさい。'(_千円札の枚数,_二千円札の枚数,_五千円札の枚数,_一万円札の枚数) :- '四つ足して答えが50'(_千円札の枚数,_二千円札の枚数,_五千円札の枚数,_一万円札の枚数), 100000 is 1000 * _千円札の枚数 + 2000 * _二千円札の枚数 + 5000 * _五千円札の枚数 + 10000 * _一万円札の枚数. '四つ足して答えが50'(A,B,C,D) :- 答えが50以下の足し算(A,B,S1), 答えが50以下の足し算(S1,C,S2), 答えが50以下の足し算(S2,D,50). 答えが50以下の足し算(1,1,2). 答えが50以下の足し算(1,2,3). 答えが50以下の足し算(1,3,4). 答えが50以下の足し算(1,4,5). 答えが50以下の足し算(1,5,6). 答えが50以下の足し算(1,6,7). 答えが50以下の足し算(1,7,8). 答えが50以下の足し算(1,8,9). 答えが50以下の足し算(1,9,10). 答えが50以下の足し算(1,10,11). 答えが50以下の足し算(1,11,12). 答えが50以下の足し算(1,12,13). 答えが50以下の足し算(1,13,14). 答えが50以下の足し算(1,14,15). 答えが50以下の足し算(1,15,16). 答えが50以下の足し算(1,16,17). 答えが50以下の足し算(1,17,18). 答えが50以下の足し算(1,18,19). 答えが50以下の足し算(1,19,20). 答えが50以下の足し算(1,20,21). 答えが50以下の足し算(1,21,22). 答えが50以下の足し算(1,22,23). 答えが50以下の足し算(1,23,24). 答えが50以下の足し算(1,24,25). 答えが50以下の足し算(1,25,26). 答えが50以下の足し算(1,26,27). 答えが50以下の足し算(1,27,28). 答えが50以下の足し算(1,28,29). 答えが50以下の足し算(1,29,30). 答えが50以下の足し算(1,30,31). 答えが50以下の足し算(1,31,32). 答えが50以下の足し算(1,32,33). 答えが50以下の足し算(1,33,34). 答えが50以下の足し算(1,34,35). 答えが50以下の足し算(1,35,36). 答えが50以下の足し算(1,36,37). 答えが50以下の足し算(1,37,38). 答えが50以下の足し算(1,38,39). 答えが50以下の足し算(1,39,40). 答えが50以下の足し算(1,40,41). 答えが50以下の足し算(1,41,42). 答えが50以下の足し算(1,42,43). 答えが50以下の足し算(1,43,44). 答えが50以下の足し算(1,44,45). 答えが50以下の足し算(1,45,46). 答えが50以下の足し算(1,46,47). 答えが50以下の足し算(1,47,48). 答えが50以下の足し算(1,48,49). 答えが50以下の足し算(1,49,50). 答えが50以下の足し算(2,1,3). 答えが50以下の足し算(2,2,4). 答えが50以下の足し算(2,3,5). 答えが50以下の足し算(2,4,6). 答えが50以下の足し算(2,5,7). 答えが50以下の足し算(2,6,8). 答えが50以下の足し算(2,7,9). 答えが50以下の足し算(2,8,10). 答えが50以下の足し算(2,9,11). 答えが50以下の足し算(2,10,12). 答えが50以下の足し算(2,11,13). 答えが50以下の足し算(2,12,14). 答えが50以下の足し算(2,13,15). 答えが50以下の足し算(2,14,16). 答えが50以下の足し算(2,15,17). 答えが50以下の足し算(2,16,18). 答えが50以下の足し算(2,17,19). 答えが50以下の足し算(2,18,20). 答えが50以下の足し算(2,19,21). 答えが50以下の足し算(2,20,22). 答えが50以下の足し算(2,21,23). 答えが50以下の足し算(2,22,24). 答えが50以下の足し算(2,23,25). 答えが50以下の足し算(2,24,26). 答えが50以下の足し算(2,25,27). 答えが50以下の足し算(2,26,28). 答えが50以下の足し算(2,27,29). 答えが50以下の足し算(2,28,30). 答えが50以下の足し算(2,29,31). 答えが50以下の足し算(2,30,32). 答えが50以下の足し算(2,31,33). 答えが50以下の足し算(2,32,34). 答えが50以下の足し算(2,33,35). 答えが50以下の足し算(2,34,36). 答えが50以下の足し算(2,35,37). 答えが50以下の足し算(2,36,38). 答えが50以下の足し算(2,37,39). 答えが50以下の足し算(2,38,40). 答えが50以下の足し算(2,39,41). 答えが50以下の足し算(2,40,42). 答えが50以下の足し算(2,41,43). 答えが50以下の足し算(2,42,44). 答えが50以下の足し算(2,43,45). 答えが50以下の足し算(2,44,46). 答えが50以下の足し算(2,45,47). 答えが50以下の足し算(2,46,48). 答えが50以下の足し算(2,47,49). 答えが50以下の足し算(2,48,50). 答えが50以下の足し算(3,1,4). 答えが50以下の足し算(3,2,5). 答えが50以下の足し算(3,3,6). 答えが50以下の足し算(3,4,7). 答えが50以下の足し算(3,5,8). 答えが50以下の足し算(3,6,9). 答えが50以下の足し算(3,7,10). 答えが50以下の足し算(3,8,11). 答えが50以下の足し算(3,9,12). 答えが50以下の足し算(3,10,13). 答えが50以下の足し算(3,11,14). 答えが50以下の足し算(3,12,15). 答えが50以下の足し算(3,13,16). 答えが50以下の足し算(3,14,17). 答えが50以下の足し算(3,15,18). 答えが50以下の足し算(3,16,19). 答えが50以下の足し算(3,17,20). 答えが50以下の足し算(3,18,21). 答えが50以下の足し算(3,19,22). 答えが50以下の足し算(3,20,23). 答えが50以下の足し算(3,21,24). 答えが50以下の足し算(3,22,25). 答えが50以下の足し算(3,23,26). 答えが50以下の足し算(3,24,27). 答えが50以下の足し算(3,25,28). 答えが50以下の足し算(3,26,29). 答えが50以下の足し算(3,27,30). 答えが50以下の足し算(3,28,31). 答えが50以下の足し算(3,29,32). 答えが50以下の足し算(3,30,33). 答えが50以下の足し算(3,31,34). 答えが50以下の足し算(3,32,35). 答えが50以下の足し算(3,33,36). 答えが50以下の足し算(3,34,37). 答えが50以下の足し算(3,35,38). 答えが50以下の足し算(3,36,39). 答えが50以下の足し算(3,37,40). 答えが50以下の足し算(3,38,41). 答えが50以下の足し算(3,39,42). 答えが50以下の足し算(3,40,43). 答えが50以下の足し算(3,41,44). 答えが50以下の足し算(3,42,45). 答えが50以下の足し算(3,43,46). 答えが50以下の足し算(3,44,47). 答えが50以下の足し算(3,45,48). 答えが50以下の足し算(3,46,49). 答えが50以下の足し算(3,47,50). 答えが50以下の足し算(4,1,5). 答えが50以下の足し算(4,2,6). 答えが50以下の足し算(4,3,7). 答えが50以下の足し算(4,4,8). 答えが50以下の足し算(4,5,9). 答えが50以下の足し算(4,6,10). 答えが50以下の足し算(4,7,11). 答えが50以下の足し算(4,8,12). 答えが50以下の足し算(4,9,13). 答えが50以下の足し算(4,10,14). 答えが50以下の足し算(4,11,15). 答えが50以下の足し算(4,12,16). 答えが50以下の足し算(4,13,17). 答えが50以下の足し算(4,14,18). 答えが50以下の足し算(4,15,19). 答えが50以下の足し算(4,16,20). 答えが50以下の足し算(4,17,21). 答えが50以下の足し算(4,18,22). 答えが50以下の足し算(4,19,23). 答えが50以下の足し算(4,20,24). 答えが50以下の足し算(4,21,25). 答えが50以下の足し算(4,22,26). 答えが50以下の足し算(4,23,27). 答えが50以下の足し算(4,24,28). 答えが50以下の足し算(4,25,29). 答えが50以下の足し算(4,26,30). 答えが50以下の足し算(4,27,31). 答えが50以下の足し算(4,28,32). 答えが50以下の足し算(4,29,33). 答えが50以下の足し算(4,30,34). 答えが50以下の足し算(4,31,35). 答えが50以下の足し算(4,32,36). 答えが50以下の足し算(4,33,37). 答えが50以下の足し算(4,34,38). 答えが50以下の足し算(4,35,39). 答えが50以下の足し算(4,36,40). 答えが50以下の足し算(4,37,41). 答えが50以下の足し算(4,38,42). 答えが50以下の足し算(4,39,43). 答えが50以下の足し算(4,40,44). 答えが50以下の足し算(4,41,45). 答えが50以下の足し算(4,42,46). 答えが50以下の足し算(4,43,47). 答えが50以下の足し算(4,44,48). 答えが50以下の足し算(4,45,49). 答えが50以下の足し算(4,46,50). 答えが50以下の足し算(5,1,6). 答えが50以下の足し算(5,2,7). 答えが50以下の足し算(5,3,8). 答えが50以下の足し算(5,4,9). 答えが50以下の足し算(5,5,10). 答えが50以下の足し算(5,6,11). 答えが50以下の足し算(5,7,12). 答えが50以下の足し算(5,8,13). 答えが50以下の足し算(5,9,14). 答えが50以下の足し算(5,10,15). 答えが50以下の足し算(5,11,16). 答えが50以下の足し算(5,12,17). 答えが50以下の足し算(5,13,18). 答えが50以下の足し算(5,14,19). 答えが50以下の足し算(5,15,20). 答えが50以下の足し算(5,16,21). 答えが50以下の足し算(5,17,22). 答えが50以下の足し算(5,18,23). 答えが50以下の足し算(5,19,24). 答えが50以下の足し算(5,20,25). 答えが50以下の足し算(5,21,26). 答えが50以下の足し算(5,22,27). 答えが50以下の足し算(5,23,28). 答えが50以下の足し算(5,24,29). 答えが50以下の足し算(5,25,30). 答えが50以下の足し算(5,26,31). 答えが50以下の足し算(5,27,32). 答えが50以下の足し算(5,28,33). 答えが50以下の足し算(5,29,34). 答えが50以下の足し算(5,30,35). 答えが50以下の足し算(5,31,36). 答えが50以下の足し算(5,32,37). 答えが50以下の足し算(5,33,38). 答えが50以下の足し算(5,34,39). 答えが50以下の足し算(5,35,40). 答えが50以下の足し算(5,36,41). 答えが50以下の足し算(5,37,42). 答えが50以下の足し算(5,38,43). 答えが50以下の足し算(5,39,44). 答えが50以下の足し算(5,40,45). 答えが50以下の足し算(5,41,46). 答えが50以下の足し算(5,42,47). 答えが50以下の足し算(5,43,48). 答えが50以下の足し算(5,44,49). 答えが50以下の足し算(5,45,50). 答えが50以下の足し算(6,1,7). 答えが50以下の足し算(6,2,8). 答えが50以下の足し算(6,3,9). 答えが50以下の足し算(6,4,10). 答えが50以下の足し算(6,5,11). 答えが50以下の足し算(6,6,12). 答えが50以下の足し算(6,7,13). 答えが50以下の足し算(6,8,14). 答えが50以下の足し算(6,9,15). 答えが50以下の足し算(6,10,16). 答えが50以下の足し算(6,11,17). 答えが50以下の足し算(6,12,18). 答えが50以下の足し算(6,13,19). 答えが50以下の足し算(6,14,20). 答えが50以下の足し算(6,15,21). 答えが50以下の足し算(6,16,22). 答えが50以下の足し算(6,17,23). 答えが50以下の足し算(6,18,24). 答えが50以下の足し算(6,19,25). 答えが50以下の足し算(6,20,26). 答えが50以下の足し算(6,21,27). 答えが50以下の足し算(6,22,28). 答えが50以下の足し算(6,23,29). 答えが50以下の足し算(6,24,30). 答えが50以下の足し算(6,25,31). 答えが50以下の足し算(6,26,32). 答えが50以下の足し算(6,27,33). 答えが50以下の足し算(6,28,34). 答えが50以下の足し算(6,29,35). 答えが50以下の足し算(6,30,36). 答えが50以下の足し算(6,31,37). 答えが50以下の足し算(6,32,38). 答えが50以下の足し算(6,33,39). 答えが50以下の足し算(6,34,40). 答えが50以下の足し算(6,35,41). 答えが50以下の足し算(6,36,42). 答えが50以下の足し算(6,37,43). 答えが50以下の足し算(6,38,44). 答えが50以下の足し算(6,39,45). 答えが50以下の足し算(6,40,46). 答えが50以下の足し算(6,41,47). 答えが50以下の足し算(6,42,48). 答えが50以下の足し算(6,43,49). 答えが50以下の足し算(6,44,50). 答えが50以下の足し算(7,1,8). 答えが50以下の足し算(7,2,9). 答えが50以下の足し算(7,3,10). 答えが50以下の足し算(7,4,11). 答えが50以下の足し算(7,5,12). 答えが50以下の足し算(7,6,13). 答えが50以下の足し算(7,7,14). 答えが50以下の足し算(7,8,15). 答えが50以下の足し算(7,9,16). 答えが50以下の足し算(7,10,17). 答えが50以下の足し算(7,11,18). 答えが50以下の足し算(7,12,19). 答えが50以下の足し算(7,13,20). 答えが50以下の足し算(7,14,21). 答えが50以下の足し算(7,15,22). 答えが50以下の足し算(7,16,23). 答えが50以下の足し算(7,17,24). 答えが50以下の足し算(7,18,25). 答えが50以下の足し算(7,19,26). 答えが50以下の足し算(7,20,27). 答えが50以下の足し算(7,21,28). 答えが50以下の足し算(7,22,29). 答えが50以下の足し算(7,23,30). 答えが50以下の足し算(7,24,31). 答えが50以下の足し算(7,25,32). 答えが50以下の足し算(7,26,33). 答えが50以下の足し算(7,27,34). 答えが50以下の足し算(7,28,35). 答えが50以下の足し算(7,29,36). 答えが50以下の足し算(7,30,37). 答えが50以下の足し算(7,31,38). 答えが50以下の足し算(7,32,39). 答えが50以下の足し算(7,33,40). 答えが50以下の足し算(7,34,41). 答えが50以下の足し算(7,35,42). 答えが50以下の足し算(7,36,43). 答えが50以下の足し算(7,37,44). 答えが50以下の足し算(7,38,45). 答えが50以下の足し算(7,39,46). 答えが50以下の足し算(7,40,47). 答えが50以下の足し算(7,41,48). 答えが50以下の足し算(7,42,49). 答えが50以下の足し算(7,43,50). 答えが50以下の足し算(8,1,9). 答えが50以下の足し算(8,2,10). 答えが50以下の足し算(8,3,11). 答えが50以下の足し算(8,4,12). 答えが50以下の足し算(8,5,13). 答えが50以下の足し算(8,6,14). 答えが50以下の足し算(8,7,15). 答えが50以下の足し算(8,8,16). 答えが50以下の足し算(8,9,17). 答えが50以下の足し算(8,10,18). 答えが50以下の足し算(8,11,19). 答えが50以下の足し算(8,12,20). 答えが50以下の足し算(8,13,21). 答えが50以下の足し算(8,14,22). 答えが50以下の足し算(8,15,23). 答えが50以下の足し算(8,16,24). 答えが50以下の足し算(8,17,25). 答えが50以下の足し算(8,18,26). 答えが50以下の足し算(8,19,27). 答えが50以下の足し算(8,20,28). 答えが50以下の足し算(8,21,29). 答えが50以下の足し算(8,22,30). 答えが50以下の足し算(8,23,31). 答えが50以下の足し算(8,24,32). 答えが50以下の足し算(8,25,33). 答えが50以下の足し算(8,26,34). 答えが50以下の足し算(8,27,35). 答えが50以下の足し算(8,28,36). 答えが50以下の足し算(8,29,37). 答えが50以下の足し算(8,30,38). 答えが50以下の足し算(8,31,39). 答えが50以下の足し算(8,32,40). 答えが50以下の足し算(8,33,41). 答えが50以下の足し算(8,34,42). 答えが50以下の足し算(8,35,43). 答えが50以下の足し算(8,36,44). 答えが50以下の足し算(8,37,45). 答えが50以下の足し算(8,38,46). 答えが50以下の足し算(8,39,47). 答えが50以下の足し算(8,40,48). 答えが50以下の足し算(8,41,49). 答えが50以下の足し算(8,42,50). 答えが50以下の足し算(9,1,10). 答えが50以下の足し算(9,2,11). 答えが50以下の足し算(9,3,12). 答えが50以下の足し算(9,4,13). 答えが50以下の足し算(9,5,14). 答えが50以下の足し算(9,6,15). 答えが50以下の足し算(9,7,16). 答えが50以下の足し算(9,8,17). 答えが50以下の足し算(9,9,18). 答えが50以下の足し算(9,10,19). 答えが50以下の足し算(9,11,20). 答えが50以下の足し算(9,12,21). 答えが50以下の足し算(9,13,22). 答えが50以下の足し算(9,14,23). 答えが50以下の足し算(9,15,24). 答えが50以下の足し算(9,16,25). 答えが50以下の足し算(9,17,26). 答えが50以下の足し算(9,18,27). 答えが50以下の足し算(9,19,28). 答えが50以下の足し算(9,20,29). 答えが50以下の足し算(9,21,30). 答えが50以下の足し算(9,22,31). 答えが50以下の足し算(9,23,32). 答えが50以下の足し算(9,24,33). 答えが50以下の足し算(9,25,34). 答えが50以下の足し算(9,26,35). 答えが50以下の足し算(9,27,36). 答えが50以下の足し算(9,28,37). 答えが50以下の足し算(9,29,38). 答えが50以下の足し算(9,30,39). 答えが50以下の足し算(9,31,40). 答えが50以下の足し算(9,32,41). 答えが50以下の足し算(9,33,42). 答えが50以下の足し算(9,34,43). 答えが50以下の足し算(9,35,44). 答えが50以下の足し算(9,36,45). 答えが50以下の足し算(9,37,46). 答えが50以下の足し算(9,38,47). 答えが50以下の足し算(9,39,48). 答えが50以下の足し算(9,40,49). 答えが50以下の足し算(9,41,50). 答えが50以下の足し算(10,1,11). 答えが50以下の足し算(10,2,12). 答えが50以下の足し算(10,3,13). 答えが50以下の足し算(10,4,14). 答えが50以下の足し算(10,5,15). 答えが50以下の足し算(10,6,16). 答えが50以下の足し算(10,7,17). 答えが50以下の足し算(10,8,18). 答えが50以下の足し算(10,9,19). 答えが50以下の足し算(10,10,20). 答えが50以下の足し算(10,11,21). 答えが50以下の足し算(10,12,22). 答えが50以下の足し算(10,13,23). 答えが50以下の足し算(10,14,24). 答えが50以下の足し算(10,15,25). 答えが50以下の足し算(10,16,26). 答えが50以下の足し算(10,17,27). 答えが50以下の足し算(10,18,28). 答えが50以下の足し算(10,19,29). 答えが50以下の足し算(10,20,30). 答えが50以下の足し算(10,21,31). 答えが50以下の足し算(10,22,32). 答えが50以下の足し算(10,23,33). 答えが50以下の足し算(10,24,34). 答えが50以下の足し算(10,25,35). 答えが50以下の足し算(10,26,36). 答えが50以下の足し算(10,27,37). 答えが50以下の足し算(10,28,38). 答えが50以下の足し算(10,29,39). 答えが50以下の足し算(10,30,40). 答えが50以下の足し算(10,31,41). 答えが50以下の足し算(10,32,42). 答えが50以下の足し算(10,33,43). 答えが50以下の足し算(10,34,44). 答えが50以下の足し算(10,35,45). 答えが50以下の足し算(10,36,46). 答えが50以下の足し算(10,37,47). 答えが50以下の足し算(10,38,48). 答えが50以下の足し算(10,39,49). 答えが50以下の足し算(10,40,50). 答えが50以下の足し算(11,1,12). 答えが50以下の足し算(11,2,13). 答えが50以下の足し算(11,3,14). 答えが50以下の足し算(11,4,15). 答えが50以下の足し算(11,5,16). 答えが50以下の足し算(11,6,17). 答えが50以下の足し算(11,7,18). 答えが50以下の足し算(11,8,19). 答えが50以下の足し算(11,9,20). 答えが50以下の足し算(11,10,21). 答えが50以下の足し算(11,11,22). 答えが50以下の足し算(11,12,23). 答えが50以下の足し算(11,13,24). 答えが50以下の足し算(11,14,25). 答えが50以下の足し算(11,15,26). 答えが50以下の足し算(11,16,27). 答えが50以下の足し算(11,17,28). 答えが50以下の足し算(11,18,29). 答えが50以下の足し算(11,19,30). 答えが50以下の足し算(11,20,31). 答えが50以下の足し算(11,21,32). 答えが50以下の足し算(11,22,33). 答えが50以下の足し算(11,23,34). 答えが50以下の足し算(11,24,35). 答えが50以下の足し算(11,25,36). 答えが50以下の足し算(11,26,37). 答えが50以下の足し算(11,27,38). 答えが50以下の足し算(11,28,39). 答えが50以下の足し算(11,29,40). 答えが50以下の足し算(11,30,41). 答えが50以下の足し算(11,31,42). 答えが50以下の足し算(11,32,43). 答えが50以下の足し算(11,33,44). 答えが50以下の足し算(11,34,45). 答えが50以下の足し算(11,35,46). 答えが50以下の足し算(11,36,47). 答えが50以下の足し算(11,37,48). 答えが50以下の足し算(11,38,49). 答えが50以下の足し算(11,39,50). 答えが50以下の足し算(12,1,13). 答えが50以下の足し算(12,2,14). 答えが50以下の足し算(12,3,15). 答えが50以下の足し算(12,4,16). 答えが50以下の足し算(12,5,17). 答えが50以下の足し算(12,6,18). 答えが50以下の足し算(12,7,19). 答えが50以下の足し算(12,8,20). 答えが50以下の足し算(12,9,21). 答えが50以下の足し算(12,10,22). 答えが50以下の足し算(12,11,23). 答えが50以下の足し算(12,12,24). 答えが50以下の足し算(12,13,25). 答えが50以下の足し算(12,14,26). 答えが50以下の足し算(12,15,27). 答えが50以下の足し算(12,16,28). 答えが50以下の足し算(12,17,29). 答えが50以下の足し算(12,18,30). 答えが50以下の足し算(12,19,31). 答えが50以下の足し算(12,20,32). 答えが50以下の足し算(12,21,33). 答えが50以下の足し算(12,22,34). 答えが50以下の足し算(12,23,35). 答えが50以下の足し算(12,24,36). 答えが50以下の足し算(12,25,37). 答えが50以下の足し算(12,26,38). 答えが50以下の足し算(12,27,39). 答えが50以下の足し算(12,28,40). 答えが50以下の足し算(12,29,41). 答えが50以下の足し算(12,30,42). 答えが50以下の足し算(12,31,43). 答えが50以下の足し算(12,32,44). 答えが50以下の足し算(12,33,45). 答えが50以下の足し算(12,34,46). 答えが50以下の足し算(12,35,47). 答えが50以下の足し算(12,36,48). 答えが50以下の足し算(12,37,49). 答えが50以下の足し算(12,38,50). 答えが50以下の足し算(13,1,14). 答えが50以下の足し算(13,2,15). 答えが50以下の足し算(13,3,16). 答えが50以下の足し算(13,4,17). 答えが50以下の足し算(13,5,18). 答えが50以下の足し算(13,6,19). 答えが50以下の足し算(13,7,20). 答えが50以下の足し算(13,8,21). 答えが50以下の足し算(13,9,22). 答えが50以下の足し算(13,10,23). 答えが50以下の足し算(13,11,24). 答えが50以下の足し算(13,12,25). 答えが50以下の足し算(13,13,26). 答えが50以下の足し算(13,14,27). 答えが50以下の足し算(13,15,28). 答えが50以下の足し算(13,16,29). 答えが50以下の足し算(13,17,30). 答えが50以下の足し算(13,18,31). 答えが50以下の足し算(13,19,32). 答えが50以下の足し算(13,20,33). 答えが50以下の足し算(13,21,34). 答えが50以下の足し算(13,22,35). 答えが50以下の足し算(13,23,36). 答えが50以下の足し算(13,24,37). 答えが50以下の足し算(13,25,38). 答えが50以下の足し算(13,26,39). 答えが50以下の足し算(13,27,40). 答えが50以下の足し算(13,28,41). 答えが50以下の足し算(13,29,42). 答えが50以下の足し算(13,30,43). 答えが50以下の足し算(13,31,44). 答えが50以下の足し算(13,32,45). 答えが50以下の足し算(13,33,46). 答えが50以下の足し算(13,34,47). 答えが50以下の足し算(13,35,48). 答えが50以下の足し算(13,36,49). 答えが50以下の足し算(13,37,50). 答えが50以下の足し算(14,1,15). 答えが50以下の足し算(14,2,16). 答えが50以下の足し算(14,3,17). 答えが50以下の足し算(14,4,18). 答えが50以下の足し算(14,5,19). 答えが50以下の足し算(14,6,20). 答えが50以下の足し算(14,7,21). 答えが50以下の足し算(14,8,22). 答えが50以下の足し算(14,9,23). 答えが50以下の足し算(14,10,24). 答えが50以下の足し算(14,11,25). 答えが50以下の足し算(14,12,26). 答えが50以下の足し算(14,13,27). 答えが50以下の足し算(14,14,28). 答えが50以下の足し算(14,15,29). 答えが50以下の足し算(14,16,30). 答えが50以下の足し算(14,17,31). 答えが50以下の足し算(14,18,32). 答えが50以下の足し算(14,19,33). 答えが50以下の足し算(14,20,34). 答えが50以下の足し算(14,21,35). 答えが50以下の足し算(14,22,36). 答えが50以下の足し算(14,23,37). 答えが50以下の足し算(14,24,38). 答えが50以下の足し算(14,25,39). 答えが50以下の足し算(14,26,40). 答えが50以下の足し算(14,27,41). 答えが50以下の足し算(14,28,42). 答えが50以下の足し算(14,29,43). 答えが50以下の足し算(14,30,44). 答えが50以下の足し算(14,31,45). 答えが50以下の足し算(14,32,46). 答えが50以下の足し算(14,33,47). 答えが50以下の足し算(14,34,48). 答えが50以下の足し算(14,35,49). 答えが50以下の足し算(14,36,50). 答えが50以下の足し算(15,1,16). 答えが50以下の足し算(15,2,17). 答えが50以下の足し算(15,3,18). 答えが50以下の足し算(15,4,19). 答えが50以下の足し算(15,5,20). 答えが50以下の足し算(15,6,21). 答えが50以下の足し算(15,7,22). 答えが50以下の足し算(15,8,23). 答えが50以下の足し算(15,9,24). 答えが50以下の足し算(15,10,25). 答えが50以下の足し算(15,11,26). 答えが50以下の足し算(15,12,27). 答えが50以下の足し算(15,13,28). 答えが50以下の足し算(15,14,29). 答えが50以下の足し算(15,15,30). 答えが50以下の足し算(15,16,31). 答えが50以下の足し算(15,17,32). 答えが50以下の足し算(15,18,33). 答えが50以下の足し算(15,19,34). 答えが50以下の足し算(15,20,35). 答えが50以下の足し算(15,21,36). 答えが50以下の足し算(15,22,37). 答えが50以下の足し算(15,23,38). 答えが50以下の足し算(15,24,39). 答えが50以下の足し算(15,25,40). 答えが50以下の足し算(15,26,41). 答えが50以下の足し算(15,27,42). 答えが50以下の足し算(15,28,43). 答えが50以下の足し算(15,29,44). 答えが50以下の足し算(15,30,45). 答えが50以下の足し算(15,31,46). 答えが50以下の足し算(15,32,47). 答えが50以下の足し算(15,33,48). 答えが50以下の足し算(15,34,49). 答えが50以下の足し算(15,35,50). 答えが50以下の足し算(16,1,17). 答えが50以下の足し算(16,2,18). 答えが50以下の足し算(16,3,19). 答えが50以下の足し算(16,4,20). 答えが50以下の足し算(16,5,21). 答えが50以下の足し算(16,6,22). 答えが50以下の足し算(16,7,23). 答えが50以下の足し算(16,8,24). 答えが50以下の足し算(16,9,25). 答えが50以下の足し算(16,10,26). 答えが50以下の足し算(16,11,27). 答えが50以下の足し算(16,12,28). 答えが50以下の足し算(16,13,29). 答えが50以下の足し算(16,14,30). 答えが50以下の足し算(16,15,31). 答えが50以下の足し算(16,16,32). 答えが50以下の足し算(16,17,33). 答えが50以下の足し算(16,18,34). 答えが50以下の足し算(16,19,35). 答えが50以下の足し算(16,20,36). 答えが50以下の足し算(16,21,37). 答えが50以下の足し算(16,22,38). 答えが50以下の足し算(16,23,39). 答えが50以下の足し算(16,24,40). 答えが50以下の足し算(16,25,41). 答えが50以下の足し算(16,26,42). 答えが50以下の足し算(16,27,43). 答えが50以下の足し算(16,28,44). 答えが50以下の足し算(16,29,45). 答えが50以下の足し算(16,30,46). 答えが50以下の足し算(16,31,47). 答えが50以下の足し算(16,32,48). 答えが50以下の足し算(16,33,49). 答えが50以下の足し算(16,34,50). 答えが50以下の足し算(17,1,18). 答えが50以下の足し算(17,2,19). 答えが50以下の足し算(17,3,20). 答えが50以下の足し算(17,4,21). 答えが50以下の足し算(17,5,22). 答えが50以下の足し算(17,6,23). 答えが50以下の足し算(17,7,24). 答えが50以下の足し算(17,8,25). 答えが50以下の足し算(17,9,26). 答えが50以下の足し算(17,10,27). 答えが50以下の足し算(17,11,28). 答えが50以下の足し算(17,12,29). 答えが50以下の足し算(17,13,30). 答えが50以下の足し算(17,14,31). 答えが50以下の足し算(17,15,32). 答えが50以下の足し算(17,16,33). 答えが50以下の足し算(17,17,34). 答えが50以下の足し算(17,18,35). 答えが50以下の足し算(17,19,36). 答えが50以下の足し算(17,20,37). 答えが50以下の足し算(17,21,38). 答えが50以下の足し算(17,22,39). 答えが50以下の足し算(17,23,40). 答えが50以下の足し算(17,24,41). 答えが50以下の足し算(17,25,42). 答えが50以下の足し算(17,26,43). 答えが50以下の足し算(17,27,44). 答えが50以下の足し算(17,28,45). 答えが50以下の足し算(17,29,46). 答えが50以下の足し算(17,30,47). 答えが50以下の足し算(17,31,48). 答えが50以下の足し算(17,32,49). 答えが50以下の足し算(17,33,50). 答えが50以下の足し算(18,1,19). 答えが50以下の足し算(18,2,20). 答えが50以下の足し算(18,3,21). 答えが50以下の足し算(18,4,22). 答えが50以下の足し算(18,5,23). 答えが50以下の足し算(18,6,24). 答えが50以下の足し算(18,7,25). 答えが50以下の足し算(18,8,26). 答えが50以下の足し算(18,9,27). 答えが50以下の足し算(18,10,28). 答えが50以下の足し算(18,11,29). 答えが50以下の足し算(18,12,30). 答えが50以下の足し算(18,13,31). 答えが50以下の足し算(18,14,32). 答えが50以下の足し算(18,15,33). 答えが50以下の足し算(18,16,34). 答えが50以下の足し算(18,17,35). 答えが50以下の足し算(18,18,36). 答えが50以下の足し算(18,19,37). 答えが50以下の足し算(18,20,38). 答えが50以下の足し算(18,21,39). 答えが50以下の足し算(18,22,40). 答えが50以下の足し算(18,23,41). 答えが50以下の足し算(18,24,42). 答えが50以下の足し算(18,25,43). 答えが50以下の足し算(18,26,44). 答えが50以下の足し算(18,27,45). 答えが50以下の足し算(18,28,46). 答えが50以下の足し算(18,29,47). 答えが50以下の足し算(18,30,48). 答えが50以下の足し算(18,31,49). 答えが50以下の足し算(18,32,50). 答えが50以下の足し算(19,1,20). 答えが50以下の足し算(19,2,21). 答えが50以下の足し算(19,3,22). 答えが50以下の足し算(19,4,23). 答えが50以下の足し算(19,5,24). 答えが50以下の足し算(19,6,25). 答えが50以下の足し算(19,7,26). 答えが50以下の足し算(19,8,27). 答えが50以下の足し算(19,9,28). 答えが50以下の足し算(19,10,29). 答えが50以下の足し算(19,11,30). 答えが50以下の足し算(19,12,31). 答えが50以下の足し算(19,13,32). 答えが50以下の足し算(19,14,33). 答えが50以下の足し算(19,15,34). 答えが50以下の足し算(19,16,35). 答えが50以下の足し算(19,17,36). 答えが50以下の足し算(19,18,37). 答えが50以下の足し算(19,19,38). 答えが50以下の足し算(19,20,39). 答えが50以下の足し算(19,21,40). 答えが50以下の足し算(19,22,41). 答えが50以下の足し算(19,23,42). 答えが50以下の足し算(19,24,43). 答えが50以下の足し算(19,25,44). 答えが50以下の足し算(19,26,45). 答えが50以下の足し算(19,27,46). 答えが50以下の足し算(19,28,47). 答えが50以下の足し算(19,29,48). 答えが50以下の足し算(19,30,49). 答えが50以下の足し算(19,31,50). 答えが50以下の足し算(20,1,21). 答えが50以下の足し算(20,2,22). 答えが50以下の足し算(20,3,23). 答えが50以下の足し算(20,4,24). 答えが50以下の足し算(20,5,25). 答えが50以下の足し算(20,6,26). 答えが50以下の足し算(20,7,27). 答えが50以下の足し算(20,8,28). 答えが50以下の足し算(20,9,29). 答えが50以下の足し算(20,10,30). 答えが50以下の足し算(20,11,31). 答えが50以下の足し算(20,12,32). 答えが50以下の足し算(20,13,33). 答えが50以下の足し算(20,14,34). 答えが50以下の足し算(20,15,35). 答えが50以下の足し算(20,16,36). 答えが50以下の足し算(20,17,37). 答えが50以下の足し算(20,18,38). 答えが50以下の足し算(20,19,39). 答えが50以下の足し算(20,20,40). 答えが50以下の足し算(20,21,41). 答えが50以下の足し算(20,22,42). 答えが50以下の足し算(20,23,43). 答えが50以下の足し算(20,24,44). 答えが50以下の足し算(20,25,45). 答えが50以下の足し算(20,26,46). 答えが50以下の足し算(20,27,47). 答えが50以下の足し算(20,28,48). 答えが50以下の足し算(20,29,49). 答えが50以下の足し算(20,30,50). 答えが50以下の足し算(21,1,22). 答えが50以下の足し算(21,2,23). 答えが50以下の足し算(21,3,24). 答えが50以下の足し算(21,4,25). 答えが50以下の足し算(21,5,26). 答えが50以下の足し算(21,6,27). 答えが50以下の足し算(21,7,28). 答えが50以下の足し算(21,8,29). 答えが50以下の足し算(21,9,30). 答えが50以下の足し算(21,10,31). 答えが50以下の足し算(21,11,32). 答えが50以下の足し算(21,12,33). 答えが50以下の足し算(21,13,34). 答えが50以下の足し算(21,14,35). 答えが50以下の足し算(21,15,36). 答えが50以下の足し算(21,16,37). 答えが50以下の足し算(21,17,38). 答えが50以下の足し算(21,18,39). 答えが50以下の足し算(21,19,40). 答えが50以下の足し算(21,20,41). 答えが50以下の足し算(21,21,42). 答えが50以下の足し算(21,22,43). 答えが50以下の足し算(21,23,44). 答えが50以下の足し算(21,24,45). 答えが50以下の足し算(21,25,46). 答えが50以下の足し算(21,26,47). 答えが50以下の足し算(21,27,48). 答えが50以下の足し算(21,28,49). 答えが50以下の足し算(21,29,50). 答えが50以下の足し算(22,1,23). 答えが50以下の足し算(22,2,24). 答えが50以下の足し算(22,3,25). 答えが50以下の足し算(22,4,26). 答えが50以下の足し算(22,5,27). 答えが50以下の足し算(22,6,28). 答えが50以下の足し算(22,7,29). 答えが50以下の足し算(22,8,30). 答えが50以下の足し算(22,9,31). 答えが50以下の足し算(22,10,32). 答えが50以下の足し算(22,11,33). 答えが50以下の足し算(22,12,34). 答えが50以下の足し算(22,13,35). 答えが50以下の足し算(22,14,36). 答えが50以下の足し算(22,15,37). 答えが50以下の足し算(22,16,38). 答えが50以下の足し算(22,17,39). 答えが50以下の足し算(22,18,40). 答えが50以下の足し算(22,19,41). 答えが50以下の足し算(22,20,42). 答えが50以下の足し算(22,21,43). 答えが50以下の足し算(22,22,44). 答えが50以下の足し算(22,23,45). 答えが50以下の足し算(22,24,46). 答えが50以下の足し算(22,25,47). 答えが50以下の足し算(22,26,48). 答えが50以下の足し算(22,27,49). 答えが50以下の足し算(22,28,50). 答えが50以下の足し算(23,1,24). 答えが50以下の足し算(23,2,25). 答えが50以下の足し算(23,3,26). 答えが50以下の足し算(23,4,27). 答えが50以下の足し算(23,5,28). 答えが50以下の足し算(23,6,29). 答えが50以下の足し算(23,7,30). 答えが50以下の足し算(23,8,31). 答えが50以下の足し算(23,9,32). 答えが50以下の足し算(23,10,33). 答えが50以下の足し算(23,11,34). 答えが50以下の足し算(23,12,35). 答えが50以下の足し算(23,13,36). 答えが50以下の足し算(23,14,37). 答えが50以下の足し算(23,15,38). 答えが50以下の足し算(23,16,39). 答えが50以下の足し算(23,17,40). 答えが50以下の足し算(23,18,41). 答えが50以下の足し算(23,19,42). 答えが50以下の足し算(23,20,43). 答えが50以下の足し算(23,21,44). 答えが50以下の足し算(23,22,45). 答えが50以下の足し算(23,23,46). 答えが50以下の足し算(23,24,47). 答えが50以下の足し算(23,25,48). 答えが50以下の足し算(23,26,49). 答えが50以下の足し算(23,27,50). 答えが50以下の足し算(24,1,25). 答えが50以下の足し算(24,2,26). 答えが50以下の足し算(24,3,27). 答えが50以下の足し算(24,4,28). 答えが50以下の足し算(24,5,29). 答えが50以下の足し算(24,6,30). 答えが50以下の足し算(24,7,31). 答えが50以下の足し算(24,8,32). 答えが50以下の足し算(24,9,33). 答えが50以下の足し算(24,10,34). 答えが50以下の足し算(24,11,35). 答えが50以下の足し算(24,12,36). 答えが50以下の足し算(24,13,37). 答えが50以下の足し算(24,14,38). 答えが50以下の足し算(24,15,39). 答えが50以下の足し算(24,16,40). 答えが50以下の足し算(24,17,41). 答えが50以下の足し算(24,18,42). 答えが50以下の足し算(24,19,43). 答えが50以下の足し算(24,20,44). 答えが50以下の足し算(24,21,45). 答えが50以下の足し算(24,22,46). 答えが50以下の足し算(24,23,47). 答えが50以下の足し算(24,24,48). 答えが50以下の足し算(24,25,49). 答えが50以下の足し算(24,26,50). 答えが50以下の足し算(25,1,26). 答えが50以下の足し算(25,2,27). 答えが50以下の足し算(25,3,28). 答えが50以下の足し算(25,4,29). 答えが50以下の足し算(25,5,30). 答えが50以下の足し算(25,6,31). 答えが50以下の足し算(25,7,32). 答えが50以下の足し算(25,8,33). 答えが50以下の足し算(25,9,34). 答えが50以下の足し算(25,10,35). 答えが50以下の足し算(25,11,36). 答えが50以下の足し算(25,12,37). 答えが50以下の足し算(25,13,38). 答えが50以下の足し算(25,14,39). 答えが50以下の足し算(25,15,40). 答えが50以下の足し算(25,16,41). 答えが50以下の足し算(25,17,42). 答えが50以下の足し算(25,18,43). 答えが50以下の足し算(25,19,44). 答えが50以下の足し算(25,20,45). 答えが50以下の足し算(25,21,46). 答えが50以下の足し算(25,22,47). 答えが50以下の足し算(25,23,48). 答えが50以下の足し算(25,24,49). 答えが50以下の足し算(25,25,50). 答えが50以下の足し算(26,1,27). 答えが50以下の足し算(26,2,28). 答えが50以下の足し算(26,3,29). 答えが50以下の足し算(26,4,30). 答えが50以下の足し算(26,5,31). 答えが50以下の足し算(26,6,32). 答えが50以下の足し算(26,7,33). 答えが50以下の足し算(26,8,34). 答えが50以下の足し算(26,9,35). 答えが50以下の足し算(26,10,36). 答えが50以下の足し算(26,11,37). 答えが50以下の足し算(26,12,38). 答えが50以下の足し算(26,13,39). 答えが50以下の足し算(26,14,40). 答えが50以下の足し算(26,15,41). 答えが50以下の足し算(26,16,42). 答えが50以下の足し算(26,17,43). 答えが50以下の足し算(26,18,44). 答えが50以下の足し算(26,19,45). 答えが50以下の足し算(26,20,46). 答えが50以下の足し算(26,21,47). 答えが50以下の足し算(26,22,48). 答えが50以下の足し算(26,23,49). 答えが50以下の足し算(26,24,50). 答えが50以下の足し算(27,1,28). 答えが50以下の足し算(27,2,29). 答えが50以下の足し算(27,3,30). 答えが50以下の足し算(27,4,31). 答えが50以下の足し算(27,5,32). 答えが50以下の足し算(27,6,33). 答えが50以下の足し算(27,7,34). 答えが50以下の足し算(27,8,35). 答えが50以下の足し算(27,9,36). 答えが50以下の足し算(27,10,37). 答えが50以下の足し算(27,11,38). 答えが50以下の足し算(27,12,39). 答えが50以下の足し算(27,13,40). 答えが50以下の足し算(27,14,41). 答えが50以下の足し算(27,15,42). 答えが50以下の足し算(27,16,43). 答えが50以下の足し算(27,17,44). 答えが50以下の足し算(27,18,45). 答えが50以下の足し算(27,19,46). 答えが50以下の足し算(27,20,47). 答えが50以下の足し算(27,21,48). 答えが50以下の足し算(27,22,49). 答えが50以下の足し算(27,23,50). 答えが50以下の足し算(28,1,29). 答えが50以下の足し算(28,2,30). 答えが50以下の足し算(28,3,31). 答えが50以下の足し算(28,4,32). 答えが50以下の足し算(28,5,33). 答えが50以下の足し算(28,6,34). 答えが50以下の足し算(28,7,35). 答えが50以下の足し算(28,8,36). 答えが50以下の足し算(28,9,37). 答えが50以下の足し算(28,10,38). 答えが50以下の足し算(28,11,39). 答えが50以下の足し算(28,12,40). 答えが50以下の足し算(28,13,41). 答えが50以下の足し算(28,14,42). 答えが50以下の足し算(28,15,43). 答えが50以下の足し算(28,16,44). 答えが50以下の足し算(28,17,45). 答えが50以下の足し算(28,18,46). 答えが50以下の足し算(28,19,47). 答えが50以下の足し算(28,20,48). 答えが50以下の足し算(28,21,49). 答えが50以下の足し算(28,22,50). 答えが50以下の足し算(29,1,30). 答えが50以下の足し算(29,2,31). 答えが50以下の足し算(29,3,32). 答えが50以下の足し算(29,4,33). 答えが50以下の足し算(29,5,34). 答えが50以下の足し算(29,6,35). 答えが50以下の足し算(29,7,36). 答えが50以下の足し算(29,8,37). 答えが50以下の足し算(29,9,38). 答えが50以下の足し算(29,10,39). 答えが50以下の足し算(29,11,40). 答えが50以下の足し算(29,12,41). 答えが50以下の足し算(29,13,42). 答えが50以下の足し算(29,14,43). 答えが50以下の足し算(29,15,44). 答えが50以下の足し算(29,16,45). 答えが50以下の足し算(29,17,46). 答えが50以下の足し算(29,18,47). 答えが50以下の足し算(29,19,48). 答えが50以下の足し算(29,20,49). 答えが50以下の足し算(29,21,50). 答えが50以下の足し算(30,1,31). 答えが50以下の足し算(30,2,32). 答えが50以下の足し算(30,3,33). 答えが50以下の足し算(30,4,34). 答えが50以下の足し算(30,5,35). 答えが50以下の足し算(30,6,36). 答えが50以下の足し算(30,7,37). 答えが50以下の足し算(30,8,38). 答えが50以下の足し算(30,9,39). 答えが50以下の足し算(30,10,40). 答えが50以下の足し算(30,11,41). 答えが50以下の足し算(30,12,42). 答えが50以下の足し算(30,13,43). 答えが50以下の足し算(30,14,44). 答えが50以下の足し算(30,15,45). 答えが50以下の足し算(30,16,46). 答えが50以下の足し算(30,17,47). 答えが50以下の足し算(30,18,48). 答えが50以下の足し算(30,19,49). 答えが50以下の足し算(30,20,50). 答えが50以下の足し算(31,1,32). 答えが50以下の足し算(31,2,33). 答えが50以下の足し算(31,3,34). 答えが50以下の足し算(31,4,35). 答えが50以下の足し算(31,5,36). 答えが50以下の足し算(31,6,37). 答えが50以下の足し算(31,7,38). 答えが50以下の足し算(31,8,39). 答えが50以下の足し算(31,9,40). 答えが50以下の足し算(31,10,41). 答えが50以下の足し算(31,11,42). 答えが50以下の足し算(31,12,43). 答えが50以下の足し算(31,13,44). 答えが50以下の足し算(31,14,45). 答えが50以下の足し算(31,15,46). 答えが50以下の足し算(31,16,47). 答えが50以下の足し算(31,17,48). 答えが50以下の足し算(31,18,49). 答えが50以下の足し算(31,19,50). 答えが50以下の足し算(32,1,33). 答えが50以下の足し算(32,2,34). 答えが50以下の足し算(32,3,35). 答えが50以下の足し算(32,4,36). 答えが50以下の足し算(32,5,37). 答えが50以下の足し算(32,6,38). 答えが50以下の足し算(32,7,39). 答えが50以下の足し算(32,8,40). 答えが50以下の足し算(32,9,41). 答えが50以下の足し算(32,10,42). 答えが50以下の足し算(32,11,43). 答えが50以下の足し算(32,12,44). 答えが50以下の足し算(32,13,45). 答えが50以下の足し算(32,14,46). 答えが50以下の足し算(32,15,47). 答えが50以下の足し算(32,16,48). 答えが50以下の足し算(32,17,49). 答えが50以下の足し算(32,18,50). 答えが50以下の足し算(33,1,34). 答えが50以下の足し算(33,2,35). 答えが50以下の足し算(33,3,36). 答えが50以下の足し算(33,4,37). 答えが50以下の足し算(33,5,38). 答えが50以下の足し算(33,6,39). 答えが50以下の足し算(33,7,40). 答えが50以下の足し算(33,8,41). 答えが50以下の足し算(33,9,42). 答えが50以下の足し算(33,10,43). 答えが50以下の足し算(33,11,44). 答えが50以下の足し算(33,12,45). 答えが50以下の足し算(33,13,46). 答えが50以下の足し算(33,14,47). 答えが50以下の足し算(33,15,48). 答えが50以下の足し算(33,16,49). 答えが50以下の足し算(33,17,50). 答えが50以下の足し算(34,1,35). 答えが50以下の足し算(34,2,36). 答えが50以下の足し算(34,3,37). 答えが50以下の足し算(34,4,38). 答えが50以下の足し算(34,5,39). 答えが50以下の足し算(34,6,40). 答えが50以下の足し算(34,7,41). 答えが50以下の足し算(34,8,42). 答えが50以下の足し算(34,9,43). 答えが50以下の足し算(34,10,44). 答えが50以下の足し算(34,11,45). 答えが50以下の足し算(34,12,46). 答えが50以下の足し算(34,13,47). 答えが50以下の足し算(34,14,48). 答えが50以下の足し算(34,15,49). 答えが50以下の足し算(34,16,50). 答えが50以下の足し算(35,1,36). 答えが50以下の足し算(35,2,37). 答えが50以下の足し算(35,3,38). 答えが50以下の足し算(35,4,39). 答えが50以下の足し算(35,5,40). 答えが50以下の足し算(35,6,41). 答えが50以下の足し算(35,7,42). 答えが50以下の足し算(35,8,43). 答えが50以下の足し算(35,9,44). 答えが50以下の足し算(35,10,45). 答えが50以下の足し算(35,11,46). 答えが50以下の足し算(35,12,47). 答えが50以下の足し算(35,13,48). 答えが50以下の足し算(35,14,49). 答えが50以下の足し算(35,15,50). 答えが50以下の足し算(36,1,37). 答えが50以下の足し算(36,2,38). 答えが50以下の足し算(36,3,39). 答えが50以下の足し算(36,4,40). 答えが50以下の足し算(36,5,41). 答えが50以下の足し算(36,6,42). 答えが50以下の足し算(36,7,43). 答えが50以下の足し算(36,8,44). 答えが50以下の足し算(36,9,45). 答えが50以下の足し算(36,10,46). 答えが50以下の足し算(36,11,47). 答えが50以下の足し算(36,12,48). 答えが50以下の足し算(36,13,49). 答えが50以下の足し算(36,14,50). 答えが50以下の足し算(37,1,38). 答えが50以下の足し算(37,2,39). 答えが50以下の足し算(37,3,40). 答えが50以下の足し算(37,4,41). 答えが50以下の足し算(37,5,42). 答えが50以下の足し算(37,6,43). 答えが50以下の足し算(37,7,44). 答えが50以下の足し算(37,8,45). 答えが50以下の足し算(37,9,46). 答えが50以下の足し算(37,10,47). 答えが50以下の足し算(37,11,48). 答えが50以下の足し算(37,12,49). 答えが50以下の足し算(37,13,50). 答えが50以下の足し算(38,1,39). 答えが50以下の足し算(38,2,40). 答えが50以下の足し算(38,3,41). 答えが50以下の足し算(38,4,42). 答えが50以下の足し算(38,5,43). 答えが50以下の足し算(38,6,44). 答えが50以下の足し算(38,7,45). 答えが50以下の足し算(38,8,46). 答えが50以下の足し算(38,9,47). 答えが50以下の足し算(38,10,48). 答えが50以下の足し算(38,11,49). 答えが50以下の足し算(38,12,50). 答えが50以下の足し算(39,1,40). 答えが50以下の足し算(39,2,41). 答えが50以下の足し算(39,3,42). 答えが50以下の足し算(39,4,43). 答えが50以下の足し算(39,5,44). 答えが50以下の足し算(39,6,45). 答えが50以下の足し算(39,7,46). 答えが50以下の足し算(39,8,47). 答えが50以下の足し算(39,9,48). 答えが50以下の足し算(39,10,49). 答えが50以下の足し算(39,11,50). 答えが50以下の足し算(40,1,41). 答えが50以下の足し算(40,2,42). 答えが50以下の足し算(40,3,43). 答えが50以下の足し算(40,4,44). 答えが50以下の足し算(40,5,45). 答えが50以下の足し算(40,6,46). 答えが50以下の足し算(40,7,47). 答えが50以下の足し算(40,8,48). 答えが50以下の足し算(40,9,49). 答えが50以下の足し算(40,10,50). 答えが50以下の足し算(41,1,42). 答えが50以下の足し算(41,2,43). 答えが50以下の足し算(41,3,44). 答えが50以下の足し算(41,4,45). 答えが50以下の足し算(41,5,46). 答えが50以下の足し算(41,6,47). 答えが50以下の足し算(41,7,48). 答えが50以下の足し算(41,8,49). 答えが50以下の足し算(41,9,50). 答えが50以下の足し算(42,1,43). 答えが50以下の足し算(42,2,44). 答えが50以下の足し算(42,3,45). 答えが50以下の足し算(42,4,46). 答えが50以下の足し算(42,5,47). 答えが50以下の足し算(42,6,48). 答えが50以下の足し算(42,7,49). 答えが50以下の足し算(42,8,50). 答えが50以下の足し算(43,1,44). 答えが50以下の足し算(43,2,45). 答えが50以下の足し算(43,3,46). 答えが50以下の足し算(43,4,47). 答えが50以下の足し算(43,5,48). 答えが50以下の足し算(43,6,49). 答えが50以下の足し算(43,7,50). 答えが50以下の足し算(44,1,45). 答えが50以下の足し算(44,2,46). 答えが50以下の足し算(44,3,47). 答えが50以下の足し算(44,4,48). 答えが50以下の足し算(44,5,49). 答えが50以下の足し算(44,6,50). 答えが50以下の足し算(45,1,46). 答えが50以下の足し算(45,2,47). 答えが50以下の足し算(45,3,48). 答えが50以下の足し算(45,4,49). 答えが50以下の足し算(45,5,50). 答えが50以下の足し算(46,1,47). 答えが50以下の足し算(46,2,48). 答えが50以下の足し算(46,3,49). 答えが50以下の足し算(46,4,50). 答えが50以下の足し算(47,1,48). 答えが50以下の足し算(47,2,49). 答えが50以下の足し算(47,3,50). 答えが50以下の足し算(48,1,49). 答えが50以下の足し算(48,2,50). 答えが50以下の足し算(49,1,50). '答えが50以下の足し算/3を定義する' :- forall(( between(1,M,50),between(1,N,50),S is M + N,S =< 50), assertz(答えが50以下の足し算(M,N,S))). % 以下のサイトは # 出題場所 http://twitter.com/genkuroki/statuses/416777263229575168" # @genkuroki # #掛算 たとえば「かけざん」のテストで常に掛算以外の方法で解く問題を # 混ぜておくとか、問題文中に無駄な数値を混ぜておいて答えを出すために # 必要な情報を文中から抜き出せるかを見るとか、すでに様々な手段が提案され、 # 自分の子の理解度を測るために実行している保護者もいる 'たとえば「かけざん」のテストで常に掛算以外の方法で解く問題を 混ぜておくとか、問題文中に無駄な数値を混ぜておいて答えを出すために 必要な情報を文中から抜き出せるかを見るとか、すでに様々な手段が提案され、 自分の子の理解度を測るために実行している保護者もいる'(A,B,C) :- length(L1,A), findall(L1,between(1,B,_),LL), flatten(LL,L2), length(L2,C). % 以下のサイトは # 出題場所 http://twitter.com/genkuroki/statuses/416777263229575168" # @genkuroki # #掛算 たとえば「かけざん」のテストで常に掛算以外の方法で解く問題を # 混ぜておくとか、問題文中に無駄な数値を混ぜておいて答えを出すために # 必要な情報を文中から抜き出せるかを見るとか、すでに様々な手段が提案され、 # 自分の子の理解度を測るために実行している保護者もいる 'たとえば「かけざん」のテストで常に掛算以外の方法で解く問題を 混ぜておくとか、問題文中に無駄な数値を混ぜておいて答えを出すために 必要な情報を文中から抜き出せるかを見るとか、すでに様々な手段が提案され、 自分の子の理解度を測るために実行している保護者もいる'(A,B,C) :- findall(1,( between(1,A,_), between(1,B,_)), length(L,C). % 以下のサイトは # teitter by @SaitoAtsushi 2014-02-16 # 問題 三人の年齢(_1,_2,_3) :- 'Bの年齢'(Bの年齢), '36の約数の重複組合せから年齢候補を得る'(_1,_2,_3), Bの年齢 is _1 + _2 + _3, 最も高い年齢の子供は一人(_1,_2,_3). 'Bの年齢'(Bの年齢) :- '36の約数の重複組合せから年齢候補を得る'(_1,_2,_3), 最も高い年齢の子供が複数いる(_1,_2,_3), Bの年齢 is _1 + _2 + _3. '36の約数の重複組合せから年齢候補を得る'(_1,_2,_3) :- '36の約数を得る'(1,_36の約数ならび), 重複組合せ(_36の約数ならび,3,[_1,_2,_3]), 36 is _1 * _2 * _3. '36の約数を得る'(36,[36]) :- !. '36の約数を得る'(N,[N|R]) :- 0 is 36 mod N,!, N_2 is N + 1, '36の約数を得る'(N_2,R). '36の約数を得る'(N,[N|R]) :- N_2 is N + 1, '36の約数を得る'(N_2,R). 重複組合せ(X,1,[A]) :- member(A,X). 重複組合せ([A|Y],N,[A|X]) :- N > 1, M is N - 1, 重複組合せ([A|Y],M,X). 重複組合せ([_|Y],N,A) :- N > 1, 重複組合せ(Y,N,A). 最も高い年齢の子供は一人(_1,_2,_3) :- append(L1,[_最大年齢|L2],[_1,_2,_3]), \+((member(A1,L1),A1 >= _最大年齢)), \+((member(A2,L2),A2 >= _最大年齢)),!. 最も高い年齢の子供が複数いる(_1,_2,_3) :- append(L1,[_最大年齢|L2],[_1,_2,_3]), \+((member(A1,L1),A1 > _最大年齢)), \+((member(A2,L2),A2 > _最大年齢)), (member(_最大年齢,L1);member(_最大年齢,L2)). % 以下のサイトは # twitter_by_@mog_shi_20140225 # #  【ググった?】 #      /      \ #    YES        NO #   /            \ # 【見つかった?】       死ね #   |    | #   YES   NO #   |     \ # じゃあ聞くな  なら、無ぇよ # % % ?- ググリ信仰(_御託宣). % ググッた? YES % 見つかった? NO % _御託宣 = じゃ、無ぇよ. % true. % ?- ググリ信仰(_御託宣) :- '【ググった?】'(_答え), ググッた(_答え,_御託宣). ググッた('YES',_御託宣) :- '【見つかった?】'(_答え), 見つかった(_答え,_御託宣),!. ググッた('NO','死ね'). 見つかった('YES',じゃあ聞くな). 見つかった('NO','なら、無ぇよ'). '【ググった?】'(_答え) :- write('ググった? '), get_line(_答え), member(_答え,['YES','NO']),!. '【ググった?】'(_答え) :- '【ググった?】'(_答え). '【見つかった?】'(_答え) :- write('見つかった? '), get_line(_答え), member(_答え,['YES','NO']),!. '【見つかった?】'(_答え) :- '【見つかった?】'(_答え). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_line(X) :- get_char(C), get_line_1(C,Chars), atom_chars(X,Chars). get_line_1('\n',[]) :- !. get_line_1(end_of_file,[e,n,d,'_',o,f,'_',f,i,l,e]) :- !. get_line_1(C,[C|R]) :- get_char(C2), get_line_1(C2,R). % 以下のサイトは # 出題: # さとP # @satoshi_ura # ついでに言うと # 直方体の体積=縦×横×高さ # 立方体の体積=一辺×一辺×一辺 # この二つを、まるで別々の公式のように教えるのやめてほしい。 # 立方体っていうのは「たまたま」縦も横も高さも同じ長さの直方体っていうだけであって、それをわざわざ一辺などと書き換える意味が分からない。 # 立方体の体積(_一辺,_体積) :- 直方体の体積(_一辺,_一辺,_一辺,_体積). 直方体の体積(_縦,_横,_高さ,_体積) :- _体積 is _縦 * _横 * _高さ. % 以下のサイトは # 出典: twitter_by_@C_C_panchiga_20140322 # # 初めて見る単語だ # # while 1 do # ググろう # ははあ # 何だこの単語 # end # 初めて見る単語だ(_単語,_何だこの単語) :- ググろう(_単語,_ググリ), ははあ(_クグリ,_ははあ), 何だこの単語(_単語,_ググリ,_ははあ,_何だこの単語). 初めて見る単語だ(_単語,_何だこの単語) :- 初めて見る単語だ(_単語,_何だこの単語). % 以下のサイトは # twitter_by_@dll7_20140324 # @dll7 29分 # 正規表現で # AXAYAZ # BXBYBZ # CXCYZC # のA B Cがマッチするように書くには何が一番楽? # ただし、 # AXBYCZ # BXAYAZ # とかはマッチしないようにする。三つ同じ時だけマッチしたいとき '正規表現で AXAYAZ BXBYBZ CXCYZC のA B Cがマッチするように書くには何が一番楽?'(_文字列,_検索文字) :- 文字候補(_文字列,_検索文字), findall(_,sub_atom(_文字列,_,1,_,_検索文字),[_,_,_]). 文字候補(_文字列,_文字) :- setof(_文字,一文字ずつ取り出す(_文字列,_文字),_文字ならび), member(_文字,_文字ならび). 一文字ずつ取り出す(_文字列,_文字) :- sub_atom(_文字列,_,1,_,_文字). % 以下のサイトは # # 出典 :: 竹渕瑛一氏のtwitter 20140417より # 各駅下り(_駅) :- 下り起点駅(_下り起点駅), 下り終点駅(_下り起点駅,_下り終点駅), 各駅下り(_下り起点駅,_下り終点駅,_駅). 下り起点駅(_下り起点駅) :- 駅が隣接する(_下り起点駅,_),!. 下り終点駅(_駅,_下り終点駅) :- 駅が隣接する(_駅,_次の駅), 下り終点駅(_次の駅,_下り終点駅). 下り終点駅(_下り終点駅,_下り終点駅). 各駅上り(_駅) :- 上り終点駅(_上り終点駅), 上り起点駅(_上り終点駅,_下り起点駅), 各駅上り(_上り起点駅,_上り終点駅,_駅). 上り終点駅(_上り終点駅) :- 駅が隣接する(_上り終点駅,_),!. 上り起点駅(_駅,_上り起点駅) :- 駅が隣接する(_駅,_次の駅), 上り起点駅(_次の駅,_上り起点駅). 上り起点駅(_上り起点駅,_上り起点駅). 各駅下り(_起点駅,_終点駅,_終点駅) :- 起点駅が終点駅に到達(_起点駅,_終点駅),!. 各駅下り(_起点駅,_終点駅,_駅) :- 駅が隣接する(_起点駅,_駅_2), この先に終点駅がある(_起点駅,_終点駅), 各駅下り(_起点駅,_終点駅,_駅_2,_駅). 各駅下り(_駅,_,_駅) :- \+(駅が隣接する(_駅,_)). 各駅下り(_駅,_,_,_駅). 各駅下り(_,_終点駅,_駅_2,_駅) :- 各駅下り(_駅_2,_終点駅,_駅). この先に終点駅がある(_,_終点駅) :- var(_終点駅),!. この先に終点駅がある(_起点駅,_) :- var(_起点駅),!. この先に終点駅がある(_終点駅,_終点駅) :- !. この先に終点駅がある(_駅,_終点駅) :- 駅が隣接する(_駅,_次の駅), この先に終点駅がある(_次の駅,_終点駅). 各駅上り(_起点駅,_終点駅,_終点駅) :- 起点駅が終点駅に到達(_起点駅,_終点駅),!. 各駅上り(_起点駅,_終点駅,_駅) :- 駅が隣接する(_駅_2,_起点駅), この前に終点駅がある(_起点駅,_終点駅), 各駅上り(_起点駅,_終点駅,_駅_2,_駅). 各駅上り(_駅,_,_駅) :- \+(駅が隣接する(_,_駅)). 各駅上り(_駅,_,_,_駅). 各駅上り(_,_終点駅,_駅_2,_駅) :- 各駅上り(_駅_2,_終点駅,_駅). この前に終点駅がある(_,_終点駅) :- var(_終点駅),!. この前に終点駅がある(_起点駅,_) :- var(_起点駅),!. この前に終点駅がある(_終点駅,_終点駅) :- !. この前に終点駅がある(_駅,_終点駅) :- 駅が隣接する(_次の駅,_駅), この前に終点駅がある(_次の駅,_終点駅). 起点駅が終点駅に到達(_起点駅,_終点駅) :- var(_起点駅), var(_終点駅),!,fail. 起点駅が終点駅に到達(_起点駅,_終点駅) :- var(_起点駅),!,fail. 起点駅が終点駅に到達(_起点駅,_終点駅) :- \+(var(_起点駅)), \+(var(_終点駅)), _起点駅 = _終点駅,!. 駅(相模大野). 駅(東林間). 駅(中央林間). 駅(南林間). 駅(鶴間). 駅(大和). 駅(桜ヶ丘). 駅(高座渋谷). 駅(長後). 駅(湘南台). 駅(六会日大前). 駅(善行). 駅(藤沢本町). 駅(藤沢). 駅(本鵠沼). 駅(鵠沼海岸). 駅(片瀬江ノ島). 駅が隣接する(相模大野, 東林間). 駅が隣接する(東林間, 中央林間). 駅が隣接する(中央林間, 南林間). 駅が隣接する(南林間, 鶴間). 駅が隣接する(鶴間, 大和). 駅が隣接する(大和, 桜ヶ丘). 駅が隣接する(桜ヶ丘, 高座渋谷). 駅が隣接する(高座渋谷, 長後). 駅が隣接する(長後, 湘南台). 駅が隣接する(湘南台, 六会日大前). 駅が隣接する(六会日大前, 善行). 駅が隣接する(善行, 藤沢本町). 駅が隣接する(藤沢本町, 藤沢). 駅が隣接する(藤沢, 本鵠沼). 駅が隣接する(本鵠沼, 鵠沼海岸). 駅が隣接する(鵠沼海岸, 片瀬江ノ島). /* 各駅下り(相模大野, 東林間). 各駅下り(東林間, 中央林間). 各駅下り(中央林間, 南林間). 各駅下り(南林間, 鶴間). 各駅下り(鶴間, 大和). 各駅下り(大和, 桜ヶ丘). 各駅下り(桜ヶ丘, 高座渋谷). 各駅下り(高座渋谷, 長後). 各駅下り(長後, 湘南台). 各駅下り(湘南台, 六会日大前). 各駅下り(六会日大前, 善行). 各駅下り(善行, 藤沢本町). 各駅下り(藤沢本町, 藤沢). 各駅下り(藤沢, 本鵠沼). 各駅下り(本鵠沼, 鵠沼海岸). 各駅下り(鵠沼海岸, 片瀬江ノ島). 各駅上り(片瀬江ノ島, 鵠沼海岸). 各駅上り(鵠沼海岸, 本鵠沼). 各駅上り(本鵠沼, 藤沢). 各駅上り(藤沢, 藤沢本町). 各駅上り(藤沢本町, 善行). 各駅上り(善行, 六会日大前). 各駅上り(六会日大前, 湘南台). 各駅上り(湘南台, 長後). 各駅上り(長後, 高座渋谷). 各駅上り(高座渋谷, 桜ヶ丘). 各駅上り(桜ヶ丘, 大和). 各駅上り(大和, 鶴間). 各駅上り(鶴間, 南林間). 各駅上り(南林間, 中央林間). 各駅上り(中央林間, 東林間). 各駅上り(東林間, 相模大野). */ 急行停車駅(相模大野). 急行停車駅(藤沢). 急行停車駅(片瀬江ノ島). 急行停車駅(長後). 急行停車駅(本鵠沼). 急行停車駅(鵠沼海岸). 急行停車駅(南林間). 急行停車駅(大和). 急行停車駅(南林間). 急行停車駅(湘南台). 駅間距離(相模大野, 東林間, 1.7). 駅間距離(東林間, 中央林間, 1.3). 駅間距離(中央林間, 南林間, 1.5). 駅間距離(南林間, 鶴間, 0.6). 駅間距離(鶴間, 大和, 2.5). 駅間距離(大和, 桜ヶ丘, 2.2). 駅間距離(桜ヶ丘, 高座渋谷, 2.0). 駅間距離(高座渋谷, 長後, 2.2). 駅間距離(長後, 湘南台, 1.8). 駅間距離(湘南台, 六会日大前, 1.5). 駅間距離(六会日大前, 善行, 2.4). 駅間距離(善行, 藤沢本町, 1.6). 駅間距離(藤沢本町, 藤沢, 1.8). 駅間距離(藤沢, 本鵠沼, 1.5). 駅間距離(本鵠沼, 鵠沼海岸, 1.3). 駅間距離(鵠沼海岸, 片瀬江ノ島, 1.7). 駅のならびを得る([_起点となる駅|L]) :- 駅が隣接する(_起点となる駅,_),!, findall(_駅,駅が隣接する(_,_駅),L). 全ての急行区間(_始点駅,_終点駅,_急行区間駅ならび,_急行停車駅ならび) :- 駅のならびを得る(_駅のならび), 全ての急行区間(_駅のならび,_始点駅,_終点駅,_急行区間駅ならび,_急行停車駅ならび). 全ての急行区間(_終点駅,_始点駅,_急行区間駅ならび,_急行停車駅ならび) :- 駅のならびを得る(_駅のならび), reverse(_駅のならび,_反転した駅のならび), 全ての急行区間(_反転した駅のならび,_終点駅,_始点駅,_急行区間駅ならび,_急行停車駅ならび). 全ての急行区間(_駅のならび,_始点駅,_終点駅,_急行区間駅ならび,_急行停車駅ならび) :- append(L1,[_始点駅|R],_駅のならび), last(R,_終点駅), _急行区間駅ならび = [_始点駅|R], findall(_駅,( member(_駅,[_始点駅|R]), 急行停車駅(_駅)), _急行停車駅ならび). last([A],A) :- !. last([_|R],A) :- last(R,A). 急行を使って停車駅を最小にする(_出発点駅,_到着点駅,_駅のならび,_出発駅から急行区間までの各駅停車駅ならび,_急行区間駅ならび,_終点急行停止駅から到着駅までの各駅停車駅ならび) :- append(L1,_急行区間駅ならび,L2,_駅のならび), 全ての急行区間(_,_,_急行区間駅ならび,_), 出発駅から急行区間までの駅ならび(_出発駅,L1,_出発駅から急行区間までの各駅停車駅ならび), 終点急行停止駅から到着駅までの各駅停車駅ならび(_到着点駅,L2,_終点急行停止駅から到着駅までの各駅停車駅ならび). 出発駅から急行区間までの駅ならび(_出発駅,L1,_出発駅から急行区間までの各駅停車駅ならび) :- append(_,[_出発駅|_出発駅から急行区間までの各駅停車駅ならび],L1), \+((member(_駅,_出発駅から急行区間までの各駅停車駅ならび),急行停車駅(_駅))). 終点急行停止駅から到着駅までの各駅停車駅ならび(_到着点駅,L2,_終点急行停止駅から到着駅までの各駅停車駅ならび) :- append(_終点急行停止駅から到着駅までの駅ならび,[_到着点駅|_],L2), \+((member(_駅,_終点急行停止駅から到着駅までの駅ならび),急行停車駅(_駅))). 区間距離(_起点駅,_終点駅,_区間距離) :- 区間距離(_起点駅,_終点駅,0.0,_区間距離),!. 区間距離(_起点駅,_終点駅,_区間距離) :- 区間距離(_終点駅,_起点駅,_区間距離). 区間距離(_終点駅,_終点駅,_区間距離,_区間距離) :- !. 区間距離(_駅,_終点駅,_区間距離_1,_区間距離) :- 駅間距離(_駅,_次の駅,_駅間距離), _区間距離_2 is _区間距離_1 + _駅間距離, 区間距離(_次の駅,_終点駅,_区間距離_2,_区間距離). append([],L2,L3,L4) :- append(L2,L3,L4). append([U|L1],L2,L3,[U|L4]) :- append(L1,L2,L3,L4). % 以下のサイトは # 出典 :: twitter_by_@__BQ_20140416 '2014年4月16日5時現在の気温(南関東)'(_都市,_気温) :- '5時現在の気温(南関東)'(_都市,_気温). '5時現在の気温(南関東)'(さいたま,13.5). '5時現在の気温(南関東)'(熊谷,13.8). '5時現在の気温(南関東)'(秩父,9.2). '5時現在の気温(南関東)'(千葉,13.9). '5時現在の気温(南関東)'(銚子,13.7). '5時現在の気温(南関東)'(勝浦,10.3). '5時現在の気温(南関東)'(館山,8.7). '5時現在の気温(南関東)'(東京,15.4). '5時現在の気温(南関東)'(八王子,8.6). '5時現在の気温(南関東)'(八丈島,15.6). '5時現在の気温(南関東)'(横浜,12.7). '5時現在の気温(南関東)'(小田原,8.2). '5時現在の気温(南関東)'(三浦,10.8). % 以下のサイトは # 「留神-リュウジン-」いくす @ikuth ? 2 時間 # リスト[か,ど,か,わ,ど,わ,ん,ご]の部分集合を求めてこう # # subset([],[]). # subset([Head|Tail], [Head|L]) :- # subset(Tail,L). # subset([Head|Tail],L) :- # subset(Tail,L). # # ?- subset([か,ど,か,わ,ど,わ,ん,ご],L). # これで新しい会社名を決められるな! # # あー調子にのって書くんじゃなかったくっそ不安になってきたし間違ってたら恥ずかしいわwww # # 要は対象リストの先頭を取り出して、部分集合リストに入れるか入れないかことだし…でもこれだと「角ドワンゴ川」とかはつくれない # 会社名候補(_文字ならび,_会社名候補) :- subset(_文字ならび,_部分文字ならび), atomic_list_concat(_部分文字ならび,_会社名候補). subset([],[]). subset(L1,L) :- 置換候補(L1,L,Tail,L2), subset(Tail,L2). subset([Head|Tail],L) :- subset(Tail,L). 置換候補([か|R1],[カ|R2],R1,R2). 置換候補([ど|R1],[ド|R2],R1,R2). 置換候補([わ|R1],[ワ|R2],R1,R2). 置換候補([ど|R1],[ド|R2],R1,R2). 置換候補([ん|R1],[ン|R2],R1,R2). 置換候補([ご|R1],[ゴ|R2],R1,R2). 置換候補([か,ど|R1],[角|R2],R1,R2). 置換候補([か,わ|R1],[川|R2],R1,R2). 置換候補([A|R1],[A|R2],R1,R2). % % ?- 会社名候補([か,ど,か,わ,ど,わ,ん,ご],L). % L = カドカワドワンゴ ; % L = カドカワドワンご ; % L = カドカワドワン ; % L = カドカワドワんゴ ; % L = カドカワドワんご ; % L = カドカワドワん ; % L = カドカワドワゴ ; % L = カドカワドワご ; % L = カドカワドワ ; % ・・・・・ % ・・・・・ % L = 角カんゴ ; % L = 角カんご ; % L = 角カん ; % L = 角カゴ ; % L = 角カご ; % L = 角カ ; % L = 角川ドワンゴ ; % L = 角川ドワンご ; % L = 角川ドワン ; % L = 角川ドワんゴ ; % L = 角川ドワんご ; % ・・・・・ % ・・・・・ % % 以下のサイトは # 尾崎隆大 2014年5月12日twitter # 尾崎隆大 2014年5月12日twitter(続き) 人間の不定芭蕉泡沫の世の慣らひ(_人間の不定,_芭蕉泡沫の世の慣らひ) :- 人間の不定(_人間の不定), 芭蕉泡沫の世の慣らひ(_芭蕉泡沫の世の慣らひ). 人間の不定('ことに人生は定めなくて、芭蕉のように脆く、水の泡のようにはかないのが、世の習わしなのだ。'). 芭蕉泡沫の世の慣らひ('人間のはかなさの譬え。維摩経 「是身如泡、不得久立、是身如芭蕉、中無有堅」など。'). '上記出典は日本古典文学体系「謡曲集 上」。世阿弥作曲 『葵の上』。'. % 以下のサイトは # # 出典: @fukukucchiさんのツイートをPrologの述語としてみる。 # ''(_は) :- 今日矯正歯科で起きた大事件を絵に描いてみた(_は). 今日矯正歯科で起きた大事件を絵に描いてみた(痛いというより重いです). % 以下のサイトは # # 出典: @fukukucchiさんのツイートをPrologの述語としてみる。 # 今日矯正歯科で起きた大事件を絵に描いてみた(_は) :- '当たって痛いところはありませんかー?'(_は), ''(_は). ''('痛いというよりおもいです'). '当たって痛いところはありませんかー?'(_は). % 以下のサイトは # 複数の持ち回りのタスクを、同じ人が連続しないとかの条件付きでスケヂュールしてくれるプログラム作るとしたら言語は何で作る? # あーエクセルでも出来そうだなー。なんか解の探索?みたいな問題になって、使ったことないけどLispとかPrologとかそういうプログラムで作ると良いのかなとか考えてたんだよね。 # 具体的に言えば、輪講・論文紹介・研究進捗報告、の3種のタスクを毎週こなしましょう。学生のリストがあってそれぞれ持ちまわります。ただしドクターの人は輪講はやらない。なるべく2週続けてタスクが割り振られないようにしたい。という感じですね。 # # @tonno727 具体的に言えば、輪講・論文紹介・研究進捗報告、の3種のタスクを # 毎週こなしましょう。学生のリストがあってそれぞれ持ちまわります。 # ただしドクターの人は輪講はやらない。 # なるべく2週続けてタスクが割り振られないようにしたい。という感じですね。 学生(馬場,学生). 学生(横溝,学生). 学生(円谷,ドクター). 学生(船井,学生). 学生(金井,ドクター). 学生(山内,学生). 学生(林田,学生). 学生(沢木,学生). スケジュール(_輪講回数,_論文紹介回数,_研究進捗報告回数,_スケジュール) :- 輪講者ならびを生成(_輪講者ならび), 論文紹介者ならびを生成(_論文紹介者ならび), 研究進捗報告者ならびを生成(_研究進捗報告者ならび), スケジュール(_輪講回数,_論文紹介回数,_研究進捗報告回数,[],_輪講者ならび,_論文紹介者ならび,_研究進捗報告者ならび,_スケジュール). スケジュール(0,0,0,_,_,_,_,[]) :- !. スケジュール(_輪講残り回数,_論文紹介残り回数,_研究進捗報告残り回数,_前週ならび,_輪講者,_論文紹介者,_研究進捗報告者,[[_輪講者,_論文紹介者,_研究進捗報告者]|R]) :- 輪講者候補(_輪講残り回数,_前週ならび,_輪講者ならび,_輪講残り回数_2,_輪講者,_輪講者ならび_2), 論文紹介者候補(_論文紹介残り回数,_前週ならび,_論文紹介者ならび,_論文紹介残り回数_2,_論文紹介者,_論文紹介者ならび_2), 研究進捗報告者候補(_研究進捗報告残り回数,_前週ならび,_研究進捗報告者ならび,_研究進捗報告残り回数_2,_研究進捗報告者,_研究進捗報告者ならび_2), スケジュール(_輪講残り回数_2,_論文紹介残り回数_2,_研究進捗報告残り回数_2,[_輪講者,_論文紹介者,_研究進捗報告者],_輪講者ならび_2,_論文紹介者ならび_2,_研究進捗報告報告者ならび_2,R). 輪講者候補(0,_,_,0,'',_) :- !. 輪講者候補(M,_前週ならび,[],N,_輪講者,_輪講者ならび_2) :- 輪講者ならびを生成してから候補を得る(M,_前週ならび,[],N,_輪講者,_輪講者ならび_2). 輪講者候補(M,_前週ならび,_輪講者ならび,N,_輪講者,_輪講者ならび_2) :- 現在の輪講者ならびから候補を得る(M,_前週ならび,_輪講者ならび,N,_輪講者,_輪講者ならび_2). 輪講者ならびを生成してから候補を得る(M,_前週ならび,[],N,_輪講者,_輪講者ならび_2) :- 輪講者ならびを生成(_輪講者ならび), 現在の輪講者ならびから候補を得る(M,_前週ならび,_輪講者ならび,N,_輪講者,_輪講者ならび_2). 現在の輪講者ならびから候補を得る(M,_前週ならび,_輪講者ならび,N,_輪講者,_輪講者ならび_2) :- select(_輪講者,_輪講者ならび,_輪講者ならび_2), \+(member(_輪講者,_前週ならび)), succ(N,M). 論文紹介者候補(0,_,_,0,'',_) :- !. 論文紹介者候補(M,_前週ならび,[],N,_論文紹介者,_論文紹介者ならび_2) :- 論文紹介者ならびを生成してから候補を得る(M,_前週ならび,[],N,_論文紹介者,_論文紹介者ならび_2). 論文紹介者候補(M,_前週ならび,_論文紹介者ならび,N,_論文紹介者,_論文紹介者ならび_2) :- 現在の論文紹介者ならびから候補を得る(M,_前週ならび,_論文紹介者ならび,N,_論文紹介者,_論文紹介者ならび_2). 論文紹介者ならびを生成してから候補を得る(M,_前週ならび,[],N,_論文紹介者,_論文紹介者ならび_2) :- 現在の論文紹介者ならびを生成する(_論文紹介者ならび), 論文紹介者ならびから候補を得る(M,_前週ならび,_論文紹介者ならび,N,_論文紹介者,_論文紹介者ならび_2). 現在の論文紹介者ならびから候補を得る(M,_前週ならび,_論文紹介者ならび,N,_論文紹介者,_論文紹介者ならび_2) :- select(_論文紹介者,_論文紹介者ならび,_論文紹介者ならび_2), \+(member(_論文紹介者,_前週ならび)), succ(N,M). 研究進捗報告者候補(0,_,_,0,'',_) :- !. 研究進捗報告者候補(M,_前週ならび,[],N,_研究進捗報告者,_研究進捗報告者ならび_2) :- 研究進捗報告者ならびを生成してから候補を得る(M,_前週ならび,[],N,_研究進捗報告者,_研究進捗報告者ならび_2). 研究進捗報告者候補(M,_前週ならび,_研究進捗報告者ならび,N,_研究進捗報告者,_研究進捗報告者ならび_2) :- 現在の研究進捗報告者ならびから候補を得る(M,_前週ならび,_研究進捗報告者ならび,N,_研究進捗報告者,_研究進捗報告者ならび_2). 研究進捗報告者ならびを生成してから候補を得る(M,_前週ならび,[],N,_研究進捗報告者,_研究進捗報告者ならび_2) :- 研究進捗報告者ならびの生成(_研究進捗報告者ならび), 現在の研究進捗報告者ならびから候補を得る(M,_前週ならび,_研究進捗報告者ならび,N,_研究進捗報告者,_研究進捗報告者ならび_2). 現在の研究進捗報告者ならびから候補を得る(M,_前週ならび,_研究進捗報告者ならび,N,_研究進捗報告者,_研究進捗報告者ならび_2) :- select(_研究進捗報告者,_研究進捗報告者ならび,_研究進捗報告者ならび_2), \+(member(_研究進捗報告者,_前週ならび)), succ(N,M). 輪講者ならびを生成(_輪講者ならび) :- findall(_学生,( 学生(_学生,_クラス), \+(_クラス = ドクター)), _輪講者ならび). 論文紹介者ならびを生成(_論文紹介者ならび) :- findall(_学生,学生(_学生,_),_論文紹介者ならび). 研究進捗報告者ならびを生成(_研究進捗報告者ならび) :- findall(_学生,学生(_学生,_),_研究進捗報告者ならび). % 以下のサイトは % 出典: twitter_by_@wakamesoba98_20140605 丸ノ内線の時刻表は何度見ても面白い(_丸ノ内線の時刻表) :- findall([N,L],( 丸ノ内線新宿駅池袋方面標準時刻表(N,L)), _丸ノ内線の時刻表). 丸ノ内線新宿駅池袋方面標準時刻表(5,[00,15,28,35,41,48,54]). 丸ノ内線新宿駅池袋方面標準時刻表(6',[00,05,09,14,24,27,30,35,38,41,44,48,51,55,58]). 丸ノ内線新宿駅池袋方面標準時刻表(7',[01,04,07,10,13,16,19,21,23,26,29,31,33,36,38,41,43,45,48,50,52,55,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(8',[01,03,05,08,09,11,13,15,18,19,21,24,26,28,30,32,35,37,39,41,44,46,48,50,53, 54,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(9',[01,04,06,08,10,12,15,17,19,22,26,29,32,34,36,39,42,45,47,49,52,54,58]). 丸ノ内線新宿駅池袋方面標準時刻表(10',[01,04,08,12,16,20,24,28,32,36,40,44,48,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(11,[01,04,06,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(12,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(13,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(14,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). % 以下のサイトは % 出典: twitter_by_@wakamesoba98_20140605 丸ノ内線の時刻表は何度見ても面白い(_丸ノ内線の時刻表) :- findall([N,L],( 丸ノ内線新宿駅池袋方面標準時刻表(N,L)), _丸ノ内線の時刻表). 丸ノ内線新宿駅池袋方面標準時刻表(5,[00,15,28,35,41,48,54]). 丸ノ内線新宿駅池袋方面標準時刻表(6',[00,05,09,14,24,27,30,35,38,41,44,48,51,55,58]). 丸ノ内線新宿駅池袋方面標準時刻表(7',[01,04,07,10,13,16,19,21,23,26,29,31,33,36,38,41,43,45,48,50,52,55,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(8',[01,03,05,08,09,11,13,15,18,19,21,24,26,28,30,32,35,37,39,41,44,46,48,50,53, 54,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(9',[01,04,06,08,10,12,15,17,19,22,26,29,32,34,36,39,42,45,47,49,52,54,58]). 丸ノ内線新宿駅池袋方面標準時刻表(10',[01,04,08,12,16,20,24,28,32,36,40,44,48,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(11,[01,04,06,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(12,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(13,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(14,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(_何時,_時刻ならび) :- between(11,14,_何時), '11時から14時までの時刻ならび'(1,[3,4,5],_時刻ならび). '11時から14時までの時刻ならび'(N,[],L) :- '11時から14時までの時刻ならび'(N,[3,4,5],L). '11時から14時までの時刻ならび'(N,[M|R2],[]) :- N > 59,!. '11時から14時までの時刻ならび'(N,[M|R2],[N|R3]) :- N2 is N + M, '11時から14時までの時刻ならび'(N2,R2,R3). % 以下のサイトは % 出典: twitter_by_@wakamesoba98_20140605 丸ノ内線の時刻表は何度見ても面白い(_丸ノ内線の時刻表) :- findall([N,L],( 丸ノ内線新宿駅池袋方面標準時刻表(N,L)), _丸ノ内線の時刻表). 丸ノ内線新宿駅池袋方面標準時刻表(5,[00,15,28,35,41,48,54]). 丸ノ内線新宿駅池袋方面標準時刻表(6',[00,05,09,14,24,27,30,35,38,41,44,48,51,55,58]). 丸ノ内線新宿駅池袋方面標準時刻表(7',[01,04,07,10,13,16,19,21,23,26,29,31,33,36,38,41,43,45,48,50,52,55,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(8',[01,03,05,08,09,11,13,15,18,19,21,24,26,28,30,32,35,37,39,41,44,46,48,50,53, 54,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(9',[01,04,06,08,10,12,15,17,19,22,26,29,32,34,36,39,42,45,47,49,52,54,58]). 丸ノ内線新宿駅池袋方面標準時刻表(10',[01,04,08,12,16,20,24,28,32,36,40,44,48,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(11,[01,04,06,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(12,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(13,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). % 丸ノ内線新宿駅池袋方面標準時刻表(14,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(_何時,_時刻ならび) :- between(11,14,_何時), '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(1,[3,4,5],_時刻ならび). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[],L) :- '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[3,4,5],L). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[]) :- N > 59,!. '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[N|R3]) :- N2 is N + M, '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N2,R2,R3). % 以下のサイトは % 出典: twitter_by_@wakamesoba98_20140605 丸ノ内線の時刻表は何度見ても面白い(_丸ノ内線の時刻表) :- findall([N,L],( 丸ノ内線新宿駅池袋方面標準時刻表(N,L)), _丸ノ内線の時刻表). 丸ノ内線新宿駅池袋方面標準時刻表(5,[00,15,28,35,41,48,54]). 丸ノ内線新宿駅池袋方面標準時刻表(6',[00,05,09,14,24,27,30,35,38,41,44,48,51,55,58]). 丸ノ内線新宿駅池袋方面標準時刻表(7',[01,04,07,10,13,16,19,21,23,26,29,31,33,36,38,41,43,45,48,50,52,55,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(8',[01,03,05,08,09,11,13,15,18,19,21,24,26,28,30,32,35,37,39,41,44,46,48,50,53, 54,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(9',[01,04,06,08,10,12,15,17,19,22,26,29,32,34,36,39,42,45,47,49,52,54,58]). 丸ノ内線新宿駅池袋方面標準時刻表(10',[01,04,08,12,16,20,24,28,32,36,40,44,48,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(_何時,_時刻ならび) :- between(11,14,_何時), '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(1,[3,4,5],_時刻ならび). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[],L) :- '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[3,4,5],L). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[]) :- N > 59,!. '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[N|R3]) :- N2 is N + M, '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N2,R2,R3). % 以下のサイトは % 出典: twitter_by_@wakamesoba98_20140605 丸ノ内線の時刻表は何度見ても面白い(_丸ノ内線の時刻表) :- findall([N,L],( 丸ノ内線新宿駅池袋方面標準時刻表(N,L)), _丸ノ内線の時刻表). 丸ノ内線新宿駅池袋方面標準時刻表(5,[00,15,28,35,41,48,54]). 丸ノ内線新宿駅池袋方面標準時刻表(6',[00,05,09,14,24,27,30,35,38,41,44,48,51,55,58]). 丸ノ内線新宿駅池袋方面標準時刻表(7',[01,04,07,10,13,16,19,21,23,26,29,31,33,36,38,41,43,45,48,50,52,55,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(8',[01,03,05,08,09,11,13,15,18,19,21,24,26,28,30,32,35,37,39,41,44,46,48,50,53, 54,57,59]). 丸ノ内線新宿駅池袋方面標準時刻表(9',[01,04,06,08,10,12,15,17,19,22,26,29,32,34,36,39,42,45,47,49,52,54,58]). 丸ノ内線新宿駅池袋方面標準時刻表(10',[01,04,08,12,16,20,24,28,32,36,40,44,48,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(11,[01,04,06,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(12,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(13,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). 丸ノ内線新宿駅池袋方面標準時刻表(14,[01,04,08,13,16,20,25,28,32,37,40,44,49,52,56]). '11時から14時の丸ノ内線新宿駅池袋方面標準時刻表の生成規則'(_何時,_時刻ならび) :- between(11,14,_何時), '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(1,[3,4,5],_時刻ならび). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[],L) :- '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[3,4,5],L). '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[]) :- N > 59,!. '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N,[M|R2],[N|R3]) :- N2 is N + M, '11時から14時までの時刻ならびは3分,4分,5分の順刻みを繰り返す'(N2,R2,R3). % 以下のサイトは # 出典: twitter_by_@warazo_20140611 # #     RT #    RTRT #   RTRTRT #  RTRTRTRT # RTRTRTRTRT #  RTRTRTRT #   RTRTRT #    RTRT #     RT # '     RT    RTRT   RTRTRT  RTRTRTRT RTRTRTRTRT  RTRTRTRT   RTRTRT    RTRT     RT ' :- 'RT文字列'. 'RT文字列' :- 'RT文字列描画前半部', 'RT文字列描画後半部'. 'RT文字列描画前半部' :- char_code(' ',_全角空白文字コード), 'RT文字列描画前半部'(_RT副文字列,_表示制御文字列), format(_表示制御文字,[_全角空白文字コード,_RT副文字列,_全角空白文字コード]), _RT副文字列 = 'RTRTRTRT'. 'RT文字列描画前半部'(_RT副文字列,_表示制御文字列) :- sub_atom('RTRTRTRTRT',S,Len,R,_RT副文字列), Len > 0, 0 is S mod 2, _m is R // 2, 表示制御文字列の生成(_m,_表示制御文字列). 'RT文字列描画後半部' :- char_code(' ',_全角空白文字コード), 'RT文字列描画後半部'(_RT副文字列,_表示制御文字列), format(_表示制御文字,[_全角空白文字コード,_RT副文字列,_全角空白文字コード]), _RT副文字列 = 'RT'. 'RT文字列描画後半部'(_RT副文字列,_表示制御文字列) :- sub_atom('RTRTRTRTRT',S,_,0,_RT副文字列), 0 is S mod 2, _m is S // 2, 表示制御文字列の生成(_m,_表示制御文字列). 表示制御文字の生成(_m,_表示制御文字列) :- atomic_list_concat(['~',_m,c,'%q','~'_m,c~n],_表示制御文字列). % 以下のサイトは # 出典: twitter_by_@warazo_20140611 # #     RT #    RTRT #   RTRTRT #  RTRTRTRT # RTRTRTRTRT #  RTRTRTRT #   RTRTRT #    RTRT #     RT # '     RT    RTRT   RTRTRT  RTRTRTRT RTRTRTRTRT  RTRTRTRT   RTRTRT    RTRT     RT ' :- 'RT文字列描画'(2). 'RT文字列描画'(10) :- writef('%t\n',['RTRTRTRTRT']),!. 'RT文字列描画'(_n) :- sub_atom('RTRTRTRTRT',0,_n,_r,_RT副文字列), _m is _r // 2, 'M個の空白文字列'(_m,_m個の空白文字列), 'RT文字列を上下対称に描画する'(_n,_m個の空白文字列,_RT副文字列). 'RT文字列を上下対称に描画する'(_n,_m個の空白文字列,_RT副文字列) :- writef('%t%t%t\n',[_m個の空白文字列,_RT副文字列,_m個の空白文字列]), _n_2 is _n + 2, 'RT文字列描画'(_n_2), writef('%t%t%t\n',[_m個の空白文字列,_RT副文字列,_m個の空白文字列]). 'M個の空白文字列'(_m,_m個の空白文字列) :- length(L,_m), all(L,' '), atomic_list_concat(L,_m個の空白文字列). all([],_). all([A|R],A) :- all(R,A). % 以下のサイトは # 出典: twitter_by_@mandel59_20140619 # # 1) 「1から10までの数」を用意する。 # 2) 用意したデータの各要素を「すべて足す」という操作をする。 # これはまさに手続きだ '1) 「1から10までの数」を用意する。 2) 用意したデータの各要素を「すべて足す」という操作をする。 これはまさに手続きだ'(_合計) :- '1) 「1から10までの数」を用意する。'(LL), '2) 用意したデータの各要素を「すべて足す」という操作をする。'(LL,_合計). '1) 「1から10までの数」を用意する。'(LL) :- findall(L,( nth1(_,L,_)), LL). '2) 用意したデータの各要素を「すべて足す」という操作をする。'(LL,_合計) :- flatten(LL,L), length(L,_合計). % 以下のサイトは # 出典: twitter_by_@_ktwr_20140620 # 出典: Qiita::Prologカットについて # # stream を使って書きなおしてみる。 "findallterm_from_stream.pro"に保存。 # findallterm_from_stream(Stream,_):- at_end_of_stream(Stream),!. findallterm_from_stream(Stream,Term) :- read(Stream,Term0), process(Term0,Term), findallterm_from_stream(Stream,Term). process(Term0,Term) :- \+(Term0=Term),!. process(Term0,_) :- write(Term0), nl. :- open('findallterm_from_stream.pro',read,Input), findallterm_from_stream(Input,_), close(Input). findallterm_from_stream(_G1737,_G1738):-at_end_of_stream(_G1737),! findallterm_from_stream(_G1748,_G1749):-read(_G1748,_G1752),process(_G1752,_G1749),findallterm_from_stream(_G1748,_G1749) process(_G1769,_G1770):- \+_G1769=_G1770,! process(_G1783,_G1784):-write(_G1783),nl Input = (0x8e49350). % 以下のサイトは ''('https://twitter.com/_ktwr/status/480348891808669696') :- '池田香代子さんはフルートを習っていた。それで、私は音楽の授業で一度だけ、彼女の伴奏で変声期の喉を絞り上げてコールユーブンゲンを歌ったことがある'. % 以下のサイトは # 出典: twitter_by_TakaoOzaki_20140621 # 垣根を取り去る(_幾重にも垣根に囲まれたならび,_平になったならび) :- flatten(_幾重にも垣根に囲まれたならび,_平になったならび). % 以下のサイトは # 出典: twitter_by_@takashi_sansu_20140627 # # 【算数】たかしくんはネオン街に飛び出した。 # 街の喧騒がすべてを忘れさせてくれる。 # 家庭崩壊、いじめ、裏切り。 # 信頼は疑心に変わり、愛情は憎しみへと変化した。 # たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。 # 底辺2cm,高さ3cmの三角形の面積を求めなさい。 # '【算数】たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。 底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積) :- 'たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。', '底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積). 'たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。'. '底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積) :- 三角形の面積の公式(2,3,_底辺2cm高さ3cmの三角形の面積). 三角形の面積の公式(_底辺,_高さ,_三角形の面積) :- _三角形の面積 is _底辺 * _高さ / 2. % 以下のサイトは # # min-heapで以下のクエリを実装せよ # # 1.push(t, v) 時刻tに値vをpushするクエリがあったことにする # 2.pop(t) 時刻tにおける最小値をpopしたことにする # 3.min(t)時刻tにおける最小値を出力する # 時刻tに値vをpushするクエリがあったことにする(_t,_v,_stack,[[_t,_v]|_stack]). 時刻tにおける最小値をpopしたことにする(_t,_stack_1,_stack_2) :- findmin(_v,member([_t,_v],_stack_1),_min), findall([_t_1,_v_1],( member([_t_1,_v_1],_stack_1), \+((_t_1=_t,_v_1=_min))), _stack_2). 時刻tにおける最小値を出力する(_t,_stack_1,_stack_2) :- findmin(_v,member([_t,_v],_stack_1),_min), writef('%t',[_min]). % 以下のサイトは # # min-heapで以下のクエリを実装せよ # # 1.push(t, v) 時刻tに値vをpushするクエリがあったことにする # 2.pop(t) 時刻tにおける最小値をpopしたことにする # 3.min(t)時刻tにおける最小値を出力する # 時刻tに値vをpushするクエリがあったことにする(_t,_v,_stack,[[_t,_v]|_stack]). 時刻tにおける最小値をpopしたことにする(_t,_stack_1,_stack_2) :- findmin(_v,member([_t,_v],_stack_1),_min), append(L1,[[_t,_min]|L2],_stack_1), append(L1,L2,_stack_2). 時刻tにおける最小値を出力する(_t,_stack_1,_stack_2) :- findmin(_v,member([_t,_v],_stack_1),_min), writef('%t',[_min]). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2),!. p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L1,L1) :- \+(append(_,[B|_],L1)). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2),!. % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1), p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[A,B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1),!, p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[B|R2],L2). % 以下のサイトは p(A,B,L1,L2) :- append(L0,[B|R],L1), p(A,B,L0,R,L2). p(A,B,L0,R,L2) :- append(L0,[A,B|R],L2). p(A,B,L0,R,L2) :- p(A,B,R,R2), append(L0,[B|R2],L2). % 以下のサイトは # 出典: 問題 # 詳細な問題文 # 私のツイート(1) # 私のツイート(2) # 私のツイート(3) # Dは前に二人いると言っているから3人以上の部屋にいる。 # 部屋は4人1部屋か、3人と1人の二つの可能性しかない。 # 自分が前から2人目を主張するCは必然的に4人または3人の部屋にいる # この部屋のCの主張から先頭が白で、Dの主張から1人目2人目は白か黒のどちらだから2人目のCは黒とわかる # 'Dは前に二人いると言っているから3人以上の部屋にいる。部屋は4人1部屋か、3人と1人のふた部屋の、二つの可能性しかない'(LL) :- length([_,_,D|_],N), findall(L,'3人以上の部屋がある'(L),LL). '3人以上の部屋にいる'(L) :- 総組合せ([1,2,3,4],L), sum_list(L,4), member(M,L), M >= 3. 総組合せ([],_). 総組合せ(L1,L2) :- length(L1,N), between(1,N,D), 重複組合せ(L1,D,L2). 重複組合せ(X,1,[A]) :- member(A,X). 重複組合せ([A|Y],N,[A|X]) :- N > 1, M is N - 1, 重複組合せ([A|Y],M,X). 重複組合せ([_|Y],N,A) :- N > 1, 重複組合せ(Y,N,A). % 以下のサイトは # 出典: twitter_by_@kis_20140711 # こういうコメントのつけかたを複数案件でみかけるのだけど、違和感はんぱないんだけど。 # # //Aの場合 # if(A){ # // Aを出力 # print(A); # // Bの場合 # } else if(B){ # // Bを出力 # print(B); # } '入力がAの場合はAを出力、Bの場合はBを出力'(_入力,A,B,_出力) :- 入力がAの場合はAを出力(_入力,A,B,_出力). '入力がAの場合はAを出力、Bの場合はBを出力'(_入力,A,B,_出力) :- 入力がBの場合はBを出力(_入力,A,B,_出力). 入力がAの場合はAを出力(A,A,_,A). 入力がBの場合はBを出力(B,_,B,B). % 以下のサイトは # 出典: twitter_by_@mooopan_20140711 # Prologで[cell(1,_a),cell(2,_a)]と[cell(1,1),cell(1,2),cell(2,1),cell(2,2),cell(3,1),cell(3,2)]から[cell(1,1),cell(1,2),cell(2,1),cell(2,2)]を得たい 'Prologで[cell(1,_a),cell(2,_a)]と [cell(1,1),cell(1,2),cell(2,1),cell(2,2),cell(3,1),cell(3,2)]から [cell(1,1),cell(1,2),cell(2,1),cell(2,2)]を得たい'(L1,L2,X) :- findall(cell(A,C),( member(cell(A,B),L1), member(cell(A,C),L2)), X). % 以下のサイトは # 出典: twitter_by_@pleione45_20140726 '東京の気温を見ると、このスクリプトはバグってる?と思いたくなる' :- 'https://twitter.com/pleione45/status/492544531376529408', forall('☆気まぐれBot☆ 北海道の気温と風速 (14時)'(X,Y),true). '☆気まぐれBot☆ 北海道の気温と風速 (14時)'(宗谷岬,'23.3℃/8.5m'). '☆気まぐれBot☆ 北海道の気温と風速 (14時)'(納沙岬,'20.8℃/1.1m'). '☆気まぐれBot☆ 北海道の気温と風速 (14時)'(襟裳岬,'18.0℃/6.2m'). '☆気まぐれBot☆ 北海道の気温と風速 (14時)'(松前,'25.3℃/4.9m'). '☆気まぐれBot☆ 北海道の気温と風速 (14時)'(せたな,'24.5℃/3.9m'). 'https://twitter.com/pleione45/status/492544531376529408'. % 以下のサイトは # 出典: twitter_by_@facebookersjp_20140429 # '『存在と時間』の大枠を図にしてみた。網羅的ではないが。私はいつもこんな感じのモデルを頭の中で転がしてます。' :- ''. ''. % 以下のサイトは # 出典: twitter_by_TakaoOzaki_20140729 # '一巻が全部_p頁の全集'(_巻数,_p頁,_一巻が全部_p頁の全集) :- 要素数(_一巻が全部_p頁の全集,_巻数), 集める(_一巻,( 要素(_一巻,_一巻が全部_p頁の全集), 要素数(_一巻,_p頁)), _一巻が全部_p頁の全集). % 以下のサイトは # 9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ '9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ'(X) :- '9―3÷1/3+1=?'(X), 尾崎さんならPrologで解きそうだ. '9―3÷1/3+1=?'(X) :- op(401,yfx,(/)), ここだけの文字列置換('9―3÷1/3+1=?',_置換された文字列), read_term_from_atom(_置換された文字列,_式,[]), X is _式. ここだけの文字列置換(_文字列,_置換された文字列) :- findall(_置換された文字,( sub_atom(_文字列,_,1,_,_文字), ここだけの文字置換(_文字,_置換された文字)),_置換された文字ならび), atomic_list_concat(_置換された文字ならび,_置換された文字列). ここだけの文字置換('9','9'). ここだけの文字置換('―','-'). ここだけの文字置換('3','3'). ここだけの文字置換('÷','/'). ここだけの文字置換('/',' rdiv '). ここだけの文字置換('+','+'). ここだけの文字置換('1','1'). 尾崎さんならPrologで解きそうだ. % 以下のサイトは # 9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ '9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ' :- '9―3÷1/3+1=?', 尾崎さんならPrologで解きそうだ. '9―3÷1/3+1=?' :- op(401,yfx,(/)), ここだけの文字列置換('9―3÷1/3+1=?',_置換された文字列), read_term_from_atom(_置換された文字列,_式 = ?,[]), X is _式, '?を全角数字の解に置換して表示する'('9―3÷1/3+1=%t\n',X). ここだけの文字列置換(_文字列,_置換された文字列) :- findall(_置換された文字,( sub_atom(_文字列,_,1,_,_文字), ここだけの文字置換(_文字,_置換された文字)),_置換された文字ならび), atomic_list_concat(_置換された文字ならび,_置換された文字列). ここだけの文字置換('9','9'). ここだけの文字置換('―','-'). ここだけの文字置換('3','3'). ここだけの文字置換('÷','/'). ここだけの文字置換('/',' rdiv '). ここだけの文字置換('+','+'). ここだけの文字置換('1','1'). ここだけの文字置換('=','='). ここだけの文字置換('?',' ? '). ここだけの文字置換('2','2'). ここだけの文字置換('4','4'). ここだけの文字置換('5','5'). ここだけの文字置換('6','6'). ここだけの文字置換('7','7'). ここだけの文字置換('8','8'). ここだけの文字置換('0','0'). '?を全角数字の解に置換して表示する'(_表示パターン,X) :- '?を全角数字の解に置換して'(X,_解文字列), writef(_表示パターン,[_解文字列]). '?を全角数字の解に置換して'(X,_解文字列) :- number_chars(X,Chars), findall(_全角数字,( member(_数字,Chars), ここだけの文字置換(_全角数字,_数字)),_解文字ならび), atomic_list_concat(_解文字ならび,_解文字列). 尾崎さんならPrologで解きそうだ. % 以下のサイトは # # 9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ # '9―3÷1/3+1=? 尾崎さんならPrologで解きそうだ' :- '9―3÷1/3+1=?', 尾崎さんならPrologで解きそうだ. '9―3÷1/3+1=?' :- '全角文字を半角文字にしながら/をrdivに÷を/に置換する'('9―3÷1/3+1',_置換された半角式文字列), '/(実は÷)の演算子結合度をrdiv(実は/)の400より強くする', 置換された半角式文字列を解釈実行する(_置換された半角式文字列,_はてな), 式を復元して表示する('9―3÷1/3+1=',_はてな). '全角文字を半角文字にしながら/をrdivに÷を/に置換する'('9―3÷1/3+1',_置換された半角式文字列) :- 'ここだけの文字列置換(=?は除去される)'('9―3÷1/3+1=?',_置換された半角式文字列). '/(実は÷)の演算子結合度をrdiv(実は/)の400より強くする' :- op(401,yfx,(/)). 置換された半角式文字列を解釈実行する(_置換された半角式文字列,_はてな) :- read_term_from_atom(_置換された半角式文字列,_式,[]), _はてな is _式. 'ここだけの文字列置換(=?は除去される)'(_文字列,_置換された文字列) :- findall(_置換された文字,( sub_atom(_文字列,_,1,_,_文字), ここだけの置換(_文字,_置換された文字)),_置換された文字ならび), atomic_list_concat(_置換された文字ならび,_置換された文字列). ここだけの置換('9','9'). ここだけの置換('―','-'). ここだけの置換('3','3'). ここだけの置換('÷','/'). ここだけの置換('/',' rdiv '). ここだけの置換('+','+'). ここだけの置換('1','1'). ここだけの置換('=',''). ここだけの置換('?',''). ここだけの置換('2','2'). ここだけの置換('4','4'). ここだけの置換('5','5'). ここだけの置換('6','6'). ここだけの置換('7','7'). ここだけの置換('8','8'). ここだけの置換('0','0'). 式を復元して表示する(_表示文字列_1,_はてな) :- '_はてなを全角数字に置換する'(_はてな,_はてな全角文字列), writef('%t%t\n',[_表示文字列_1,_はてな全角文字列]). '_はてなを全角数字に置換する'(_はてな,_はてな全角数字文字列) :- number_chars(_はてな,_はてな数字ならび), 半角文字ならびを全角文字ならびに変換する(_はてな数字ならび,_はてな全角数字ならび), atomic_list_concat(_はてな全角数字ならび,_はてな全角数字文字列). 半角文字ならびを全角文字ならびに変換する(_はてな数字ならび,_はてな全角数字ならび) :- findall(_全角数字,( member(_半角数字,_はてな数字ならび), ここだけの置換(_全角数字,_半角数字)),_はてな全角数字ならび). 尾崎さんならPrologで解きそうだ. % 以下のサイトは # 出典::twitter_by_TakaoOzaki_20141219 # # 初心者向きのPrologの問題。100個の乱数値(0-99)をリストに生成してください。乱数値(0-99)は _乱数値 is random(100) で取れることとしてください。 # # 初心者でない人には、「あなたは、何通りのプログラムパターンが脳裏を過ぎりますか?」 # '100個の乱数値(0-99)をリストに生成します'(_乱数リスト) :- length(_乱数リスト,100), '乱数値(0-99)をリストに生成します'(_乱数リスト). '乱数値(0-99)をリストに生成します'([]). '乱数値(0-99)をリストに生成します'([_乱数値|R]) :- _乱数値 is random(100), '乱数値(0-99)をリストに生成します'(R). % 以下のサイトは # 出典::twitter_by_TakaoOzaki_20141219 # # 初心者向きのPrologの問題。100個の乱数値(0-99)をリストに生成してください。乱数値(0-99)は _乱数値 is random(100) で取れることとしてください。 # # 初心者でない人には、「あなたは、何通りのプログラムパターンが脳裏を過ぎりますか?」 # '100個の乱数値(0-99)をリストに生成します'(_乱数リスト) :- '100個の'(_乱数リスト), '乱数値(0-99)をリストに生成します'(_乱数リスト). '100個の'(_乱数リスト) :- length(_乱数リスト,100). '乱数値(0-99)をリストに生成します'([]). '乱数値(0-99)をリストに生成します'([_乱数値|R]) :- _乱数値 is random(100), '乱数値(0-99)をリストに生成します'(R). % 以下のサイトは # 出典::twitter_by_TakaoOzaki_20141219 # # 初心者向きのPrologの問題。100個の乱数値(0-99)をリストに生成してください。乱数値(0-99)は _乱数値 is random(100) で取れることとしてください。 # # 初心者でない人には、「あなたは、何通りのプログラムパターンが脳裏を過ぎりますか?」 # '100個の乱数値(0-99)をリストに生成します'(_乱数リスト) :- '100個の'(_乱数リスト), '乱数値(0-99)をリストに生成します'(_乱数リスト). '100個の'(_乱数リスト) :- length(_乱数リスト,100). '乱数値(0-99)をリストに生成します'([]). '乱数値(0-99)をリストに生成します'([_乱数値|R]) :- _乱数値 is random(100), '乱数値(0-99)をリストに生成します'(R). % 以下のサイトは # 出典::twitter_by_@twinkfrag_20150108 :- dynamic(階乗/2). :- dynamic(multifact/2). 階乗(0,1) :- !. 階乗(N,_階乗) :- N > 0, succ(N_1,N), 階乗(N_1,_階乗_1), _階乗 is _階乗_1 * N, asserta((階乗(N,_階乗) :- ! )). multifact(0,1) :- !. multifact(_n,_multifact) :- succ(_n_1,_n), multifact(_n_1,_multifact_1), 階乗(_n,_nの階乗), _multifact is _multifact_1 * _nの階乗, asserta((multifact(_n,_multifact) :- ! )). % 以下のサイトは # 出典::twitter_by_@twinkfrag_20150108 multifact(0,1) :- !. multifact(_n,_multifact) :- multifact(1,_n,1,1,_multifact). multifact(_n,_nの限界,_,_multifact,_multifact) :- '_nが_nの限界を越えた場合、解は整っている'(_n,_nの限界),!. multifact(_n,_nの限界,_階乗_1,_multifact_1,_multifact) :- 階乗とmultifactを更新して行く(_n,_nの限界,_階乗_1,_multifact_1,_multifact). '_nが_nの限界を越えた場合、解は整っている'(_n,_nの限界) :- _n > _nの限界. 階乗とmultifactを更新して行く(_n,_nの限界,_階乗_1,_multifact_1,_multifact) :- '_nの階乗を決定し、それを使って_nの_multifactを得る'(_n,_階乗_1,_multifact_1,_階乗_2,_multifact_2), succ(_n,_n_2), multifact(_n_2,_nの限界,_階乗_2,_multifact_2,_multifact). '_nの階乗を決定し、それを使って_nの_multifactを得る'(_n,_階乗_1,_multifact_1,_階乗_2,_multifact_2) :- _階乗_2 is _n * _階乗_1, _multifact_2 is _階乗_2 * _multifact_1. % 以下のサイトは # # 出典::鈴森(@_TRTA)さんのtwitter_20150119より # この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。 # 'この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。'(_種類,X) :- 二進法を解す私(_種類,X). 'この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。'(_種類,X) :- 二進法を解せぬルームメート(_種類,X). 二進法を解す私(1,_私) :- 二進法を解する(_私), 私(_私). 二進法を解せぬルームメート(0,_ルームメート) :- 二進法を解せぬ(_ルームメート), ルームメイト(_ルームメート). % 以下のサイトは # # 出典::鈴森(@_TRTA)さんのtwitter_20150119より # この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。 # 'この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。'(_この部屋,_種類,X) :- この部屋には二進法を解す私がいる(_種類,X). 'この部屋には10種類の人間がいる。二進法を解す私と解せぬルームメイトである。'(_この部屋,_種類,X) :- この部屋には二進法を解せぬルームメートがいる(_この部屋,_種類,X). 二進法を解す私(_この部屋,1,_私) :- この部屋にいる(X,_この部屋), 二進法を解する(_私), 私(_私). 二進法を解せぬルームメート(_この部屋,0,_ルームメート) :- この部屋にいる(X,_この部屋), 二進法を解せぬ(_ルームメート), ルームメイト(_ルームメート).