Prolog 写経記 その 44 union/3

(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.

Prologユーティリティライブラリ

Prologユーティリティライブラリ

今日は union/3 を写経します.
順番だと union/2 が先なのですが,その中で union/3 を使っているのでこちらを先に.

解説

union(Set1, Set2, Int) は集合 Set1Set2 の和 Union (和集合となる) を返す.

ふむ.Java でいうと... ないかも. Set#addAll(Collection) で同じことになりますね.JGL なら SetOperations#setUnion() みたいな.

モード

union(+, +, -).

ふむ.二つの集合は共に与えないといけないらしい.
そして第 3 引数に具体的なリストを与えて,それが第 1・第 2 引数で与えた集合の和集合かどうかをテストすることはできないのですね.
まぁ,集合とはいっても所詮はリストですからね.要素の順序が違ってもテストできるというとちょっと大変かも.

定義

では,こいつの定義を写経しませう.

union([], Set, Set).
union([X|Set1], Set2, Union) :-
	element(X, Set2), !,
	union(Set1, Set2, Union).
union([X|Set1], Set2, [X|Union]) :-
	union(Set1, Set2, Union).

ふむ.
最初の節は停止条件なのでスルーして,2 番目の節では第 1 引数で与えられたリストの最初の要素 X が第2引数で与えられた集合の要素であれば,第 1 引数で与えられた集合の 2 番目以降の要素からなる集合と第 2 引数で与えられた集合の和集合にXを加えたものが結果ですよ,と.
そして第 1 引数で与えられたリストの最初の要素が第2引数で与えられた集合の要素でなければ,第 1 引数で与えられた集合の 2 番目以降の要素からなる集合と第 2 引数で与えられた集合の和集合が結果ですよ,と.
ふむふむふむ.

では使用例を写経しませう.

3 ?- union([i, j, k, l, m], [n, m, l, k], X).

X = [i, j, n, m, l, k] 

Yes
4 ?- union([n, m, l, k], [i, j, k, l, m], Y).

Y = [n, i, j, k, l, m] 

Yes
5 ?- union([n, m, k, l], [], Z).

Z = [n, m, k, l] 

Yes

ふむ.
またしても特にどうということもない感じ.
っていうか,基本的に intersection/3 と同じ.
そんなわけで (どんなわけで?),このエントリもそれをコピペして再利用です.心より恥じる.

Prolog 写経記 その 45 union/2

(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.

Prologユーティリティライブラリ

Prologユーティリティライブラリ

今度は union/2 を写経します.
なんか大したことがないので連チャン.

解説

union(Sets, Union) は集合の集まりである Sets の和 Union (和集合となる) を返す.

ふむ.Java でいうと... ないかも.JGL でいうと... ないかも.
こういうのって使うのかなぁ?

モード

union(+, -).

ふむ.

定義

では,こいつの定義を写経しませう.

union([[]], []).
union([[X | Rest]], [X | Rest]) :- !.
union([Set | Sets], Union) :-
	union(Sets, U),
	union(Set, U, Union).

ふむ.
最初の節は停止条件なのでスルーして,2 番目の節から.
intersect/2 と同じく回りくどいことをやってますが,集合のリストに要素であるところの集合が一つしかない場合はそれが結果だということですね.
そして 3 番目の節.intersect/2 はほげほげぇでしたがこっちはまともですね.第 1 引数で与えられた集合のリストを最初の要素 Set と残りの要素からなるリスト Sets に分けて,Sets の和集合を U とすると,SetU の和集合が結果ということですね.

注記

結合性によって,和演算は任意の数の集合に対して適用できる.そして全ての集合の要素の集まりが答えとして返される.

ふむ.

では使用例を写経しませう.

6 ?- union([[b, a, c, d][, [c, e, b], [d, a, b, c]], U).
ERROR: Syntax error: Operator expected
ERROR: union([[b, a, c, d][, [c, e, b
ERROR: ** here **
ERROR: ], [d, a, b, c]], U) . 

をいをい!!
そりゃあダメでしょう.角括弧を閉じるのが一つ余計ですね.
気を取り直して...

6 ?- union([[b, a, c, d], [c, e, b], [d, a, b, c]], U).

U = [e, d, a, b, c] 

Yes
7 ?- union([[b, a, c, d], [c, e, b], [d, a, b, c], []], U1).

U1 = [e, d, a, b, c] 

Yes

ふむ.
今回もまた intersect/2 の再利用です.心より恥じる.


Prolog 写経記 その 46 unions/3

(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.

Prologユーティリティライブラリ

Prologユーティリティライブラリ

今度は unions/3 を写経します.
積集合シリーズまとめて一気.

解説

unions(Set, Sets, Unions) は集合 Set と集合の集まりである Sets の要素との和を見つける.結果 Unions は集合の集まりである.

ちょっと分かりにくいけど,SetSets の n 番目の要素であるところの集合との和集合が結果のリストの n 番目の要素になるってことね.
らじゃあ.

モード

unions(+, +, -).

ふむ.

定義

では,こいつの定義を写経しませう.

unions(_, [], []).
unions(Set, [S], [U]) :-
	!,
	union(Set, S, U).
unions(Set, [S | Sets], [U | Unions]) :-
	union(Set, S, U),
	unions(Set, Sets, Unions).

ふむ.
最初の節は停止条件なのでスルーして,2 番目の節から.
これはさっきの union/2 の 2 番目の節と似てますね.っていうか,こっちは素直に書いてるし.
ともあれ (JW),集合のリストに要素が一つしかない場合は,第1引数の集合との和集合が結果のリストの唯一の要素になるわけですね.
んで,3 番目の節は第 2 引数に複数の要素 (集合) がある場合,第 1 引数の集合と第 2 引数の最初の要素である集合との和集合 Int と,第1引数の集合と第 2 引数の残りの要素とからなるリストの積集合のリスト Ints を連結したものが結果ですよ,と.
まぁ,自然な感じ.

注記

union/2 との違いとしては,この述語では SetSets 中の全ての集合との和が順次求められ,集合の集まりの形で返される.

らじゃあ.

では使用例を写経しませう.

8 ?- unions([x, y, z], [[u, w, z], [w, x, y, z], [], [u, v]], L).

L = [[x, y, u, w, z], [w, x, y, z], [x, y, z], [x, y, z, u, v]] 

Yes

ふむ.特にどうという事もなく.
今回もまた intersects/2 の再利用です.心より恥じる.


Brazilian GP M.Schumacher 4th

(ToT)
ともあれ (JW),Alonso 史上最年少チャンピオンおめ.
前チャンピオンの Michael が 36 歳,新チャンピオンの Alonso は 24 歳.
まさに世代交代といった趣ですが,最後になるかもしれない来シーズン,Michael (と Ferrari&BS) の復活を願ってます.


中継が始まる前,F1 モデル (山田優,堀内葉子) → ものすぽると! (Mie) とモデル出演番組が続きましたね.


出演予定 TV 番組

この近辺 (どこ?) で話題のモデルが出演するテレビ番組を分かるだけ掲載します.
新規分は赤字で (レギュラー除く).直近分は太字で.

臼田あさ美
09/26 (月) 深夜 00:41〜01:11 NTV 「歌スタ!!」
麗菜
09/27 (火) 21:30〜23:18 CX 「秋の恋愛必勝ドラマスペシャル・小悪魔な女になる方法」

麗菜ちゃん,ドラマ初出演かな?
キャストに名前が見当たらないのでたいした役ではないのでしょうけど,とりあえずチェック.


CanCam 11 月号 エビちゃんベストセレクション 3

CanCam2005年11月号の蛯原友里ちゃん

CanCam から,お気に入りの蛯原友里ちゃんを紹介しようというこのコーナー.
今日は「新カッコいい系 vs 新かわいい系 日本全国 NEW エレガンス大現象!」から P82 の友里ちゃん.
優しい表情の友里ちゃん.癒されます♪
そんなわけで (どんなわけで?),やっぱり CanCam 買うしか!!