「prolog」のタグがつけられたコード一覧
/* 帽子は何色? 論理的思考力を持つ3人の正直者 a, b, c に、5つの帽子(赤×3, 白×2)のうち3つを1つずつ被せる。 どの人も、他2人の帽子の色を知っている(∵見えている)が、自身の帽子の色は知らない。 出題者「あなたの帽子の色は?」 a「……わかりません。」
% 嘘つき問題 /* 正直者は誰? A1「ここに、嘘つきは1人いる。」 A2「ここに、嘘つきは2人いる。」
:- op(700, xfx, ∈). ∈(X, Y) :- contains(Y, X). contains([Val|_], Val). contains([_|Tail], Val) :- contains(Tail, Val).
append([], List, List). append([Head|Tail], List, [Head|TailR]) :- append(Tail, List, TailR). 部分リスト(List, (I, I), []). 部分リスト(List, (0, End), SubList) :-
% 4×4 行列分解 groups_4x4( [ [M00, M01, M02, M03], % 行ベクトルのリスト [M10, M11, M12, M13],
append([], List, List). append([Head|Tail], List, [Head|TailR]) :- append(Tail, List, TailR). at([Val|Tail], 0, Val). at([Head|Tail], Idx, Val) :- number(Idx), Idx > 0, Idx1 is Idx - 1, at(Tail, Idx1, Val).
% 0 = 点灯(on), 1 = 消灯(off)とする。 % 解答として、すべて点灯させるためにスイッチすべきライトの成分のリストを返す。 % リスト・行列に関する諸述語 append( [], List, List ).
append( [], List, List ). append( [Head|Tail], List, [Head|TailR] ) :- append(Tail, List, TailR). at( [Head|Tail], (0, Y), Val ) :- at(Head, Y, Val). at( [Head|Tail], (X, Y), Val ) :- X > 0, X1 is X - 1, at( Tail, (X1, Y), Val ).