このディレクトリの索引

# 【論理】Prolog【初心者】 #350 # 今週から授業がPrologに入り、来週のテストまでに仕上げてくるようにと課題を渡され # いろいろと考えてみてメソッドはこれで合っていると思うのですが、 # 肝心の再帰処理でのリストの作成がわからなくて詰まっています。 # どなたか助けてもらえないでしょうか? # # //入力と出力 # ?- nextItem( [146, 394, 882, 1730, 3082], N). # N = 5106 # # # /*メソッド # 146, 394, 882, 1730, 3082 # 248, 488, 848, 1352 # 240, 360, 504 # 120, 144 # 24 # # 隣り合う数字の差分を新しいリストに出力しつづける # (248 = 394-146, 488= 882-394,...) # リストの最後まで行ったら、終了 # # 新しいリストで繰り返し同じ処理を行う # リストの数列の長さが1になったら終了 # 今まで作成したリストの最後の数字をすべて足し算する。 # # N = 24 + 144 + 504 + 1352 + 3082 # N = 5106 # # */メソッド # # '隣り合う数字の差分を新しいリストに出力しつづける。リストの最後まで行ったら、終了。 新しいリストで繰り返し同じ処理を行う。リストの数列の長さが1になったら終了。 今まで作成したリストの最後の数字をすべて足し算する。'(_リスト) :- '隣り合う数字の差分を新しいリストに出力しつづける。リストの最後まで行ったら、終了。 新しいリストで繰り返し同じ処理を行う。リストの数列の長さが1になったら終了。 今まで作成したリストの最後の数字をすべて足し算する。'([_リスト],_最後の値のリスト,_合計値), 表示する(_最後の値のリスト,_合計値). '隣り合う数字の差分を新しいリストに出力しつづける。リストの最後まで行ったら、終了。 新しいリストで繰り返し同じ処理を行う。リストの数列の長さが1になったら終了。 今まで作成したリストの最後の数字をすべて足し算する。'(_リストならび,_最後の値のリスト,_合計値) :- 'リストの数列の長さが1になったら終了。今まで作成したリストの最後の数字をすべて足し算する。'(_リストならび,_最後の値のリスト,_合計値). '隣り合う数字の差分を新しいリストに出力しつづける。リストの最後まで行ったら、終了。 新しいリストで繰り返し同じ処理を行う。リストの数列の長さが1になったら終了。 今まで作成したリストの最後の数字をすべて足し算する。'([_リスト|R],_最後の値のリスト,_合計値) :- '隣り合う数字の差分を新しいリストに出力'(_リスト,_隣り合う数字の差分リスト), '隣り合う数字の差分を新しいリストに出力しつづける。リストの最後まで行ったら、終了。 新しいリストで繰り返し同じ処理を行う。リストの数列の長さが1になったら終了。 今まで作成したリストの最後の数字をすべて足し算する。'([_隣り合う数字の差分リスト,_リスト|R],_最後の値のリスト,_合計値). 'リストの数列の長さが1になったら'([[_]|_]). 'リストの数列の長さが1になったら終了。今まで作成したリストの最後の数字をすべて足し算する。'(_リストならび,_最後の値のリスト,_合計値) :- 'リストの数列の長さが1になったら'(_リストならび), '今まで作成したリストの最後の数字をすべて足し算する。'(_リストならび,_最後の値のリスト,_合計値). '今まで作成したリストの最後の数字をすべて足し算する。'(_リストならび,_最後の値のリスト,_合計値) :- findall(_個々のリストの最後の値,( 今まで作成したリストの最後の数字を(_リストならび,_個々のリストの最後の値)),_最後の値のリスト), sum_list(_最後の値のリスト,_合計値). 今まで作成したリストの最後の数字を(_リストならび,_個々のリストの最後の値) :- append(_,[L|_],_リストならび), append(_,[_個々のリストの最後の値],L). 表示する(_最後の値のリスト,_合計値) :- atomic_list_concat(_最後の値のリスト,' + ',_式の表示文字列), writef('N = %w\nN = %w\n',[_式の表示文字列,_合計値]). '隣り合う数字の差分を新しいリストに出力'([_],[]). '隣り合う数字の差分を新しいリストに出力'([N1,N2|R1],[N3|R2]) :- N3 is N2 - N1, '隣り合う数字の差分を新しいリストに出力'([N2|R1],R2). findsum(_選択項,_項,_合計値) :- findall(_選択項,_項,_値ならび), sum_list(_値ならび,_合計値).