Prolog 写経記 その 42 list_to_set/2

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

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

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

今日は list_to_set/2 を写経します.

解説

list_to_set(List, Set) はリスト List をその中の重複する要素を削除することで集合 Set に変換する.

ふむ.Java でいうと HashSet#(Collection) みたいな.

モード

list_to_set(+, -).

ふむ.

定義

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

list_to_set([], []).
list_to_set([X | List], Set) :-
	list_to_set(List, Set),
	element(X, Set), !.
list_to_set([X | List], [X | Set]) :-
	list_to_set(List, Set).

最初の節は例によって停止条件なので無視.
2番目の節では,第 1 引数で渡されたリストを最初の要素 X と残りの要素からなるリスト List に分けて,List を集合にした結果である SetX が含まれていれば Set が結果ですよ,と.
そして SetX が含まれていなければ XSet の cons が結果ですよ,と.
ふーん.なんか非効率的な気がするんですけど.
XSet に含まれていない場合,List から集合の変換が2回行われちゃいますよ?
先に重複をチェックする方がよくない??

list_to_set([], []).
list_to_set([X | List], Set) :-
	member(X, List), !,
	list_to_set(List, Set).
list_to_set([X | List], [X | Set]) :-
	list_to_set(List, Set).

って感じ.
後で確認しませう.

注記

list_to_set/2 とリスト処理述語 delete_duplicates/2 を比較してみよ。

らじゃあ.

delete_duplicates([], []).
delete_duplicates([X|List1], List2) :-
	delete_duplicates(List1, List2),
	member(X, List2),
	!.
delete_duplicates([X|List1], [X|List2]) :-
	delete_duplicates(List1, List2).

...
同じじゃん.
「比較してみよ」って場合はことごとく同じのような気のせいが.
注意が必要な微妙な違いがあるわけじゃないのね.

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

3 ?- list_to_set([x4, x3, x5, x1, x3], Set).

Set = [x4, x5, x1, x3] 

Yes
4 ?- list_to_set([y0, y3, y1, y6], S).

S = [y0, y3, y1, y6] 

Yes

ふむ.
特にどうということもなく.
そんなわけで (どんなわけで?),先に重複チェックする版でお試し.

6 ?- list_to_set([x4, x3, x5, x1, x3], Set).

Set = [x4, x5, x1, x3] 

Yes
7 ?- list_to_set([y0, y3, y1, y6], S).

S = [y0, y3, y1, y6] 

Yes

うまく動いているような気がするよ?
こっちの方が効率的だと思うんだけどなぁ.なにか見落としてるのかなぁ?
うーみゅ...

Prolog 写経記 その 43 subset/2

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

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

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

今度は subset/2 を写経します.

解説

subset(SubSet, Set) は集合 SubSet 中の任意の要素が集合 Set の要素であるとき成功する.

ふむ.Java でいうと... Set#containsAll(Collection) みたいな.

モード

subset(+, +).

ふむ.集合操作は + が多いですね.

定義

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

subset([], _).
subset([X | Sub], Set) :-
	element(X, Set),
	subset(Sub, Set).

ふむ.
最初の節は停止条件なのでスルーして,2 番目の節.
第 1 引数で渡された集合を最初の要素 X と残りの要素からなる集合 Sub に分けて,X が第 2 引数で渡された集合 Set の要素でかつ,SubSet の部分集合なら真ということですね.
普通っぽい.

注記

subset/2 リスト処理述語 sublist/2 を比較してみよ.

らじゃあ.

sublist(Sub, List) :-
	conc(S, _, List),
	conc(_, Sub, S), !.

おっとぉ,全然違っていますね.
これは,リストが順序を持っているのに対して集合には順序がないからですね.
それにしても sublist/2 の定義すごいなぁ.

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

8 ?- subset([f, c, d], [d, a, f, e, c, b]).

Yes
9 ?- subset([f, c, g], [d, a, f, e, c, b]).

No
10 ?- subset([], [6, 8, 4, 5, 7]).

Yes
11 ?- subset([6, 8, 4, 5, 7], []).

No

ふむ.特にどうという事もなく.


LEON 11 月号

買ってきました.すごいです.超すごいです.
なんとなんと,CanCam より厚い!!!!
驚いちゃいましたよ.なんちゅー厚さ・重さ.書店勤めの人たいへんだっただろうなぁ (笑).
でもでも,ページ数は 540 ページあまり.CanCam より 100 ページ以上少ない.それでも CanCam より厚いのは紙質がいいからですね.


中身については...
エポカ ウォモからもハラコジャケットが出てるのね (P049).ドルガバからはハラコのコートが出てたし,ハラコが来てる? やはり GUCCI のハラコジャケットを選ぶべきだったか? うーみゅ...
今季アストラカンが (一部で) 流行ってるのは知ってましたが,まさかジャケットまであるとは (P133).恐るべし.マフラーもある (P141).恐るべし.一応ファー好きなおいらですが,アストラカンの見た目はあまり好きではありません.でもでも,触ってみたいっ.
は虫類とか好きじゃないけど,クロコのベルトはちょっと気になります (P145).GUCCI からはグレイのクロコベルトが出てるんですよね...
伊勢丹で売ってるスエードのシングルモンクがよさげ (P169).でもでも,昨年購入した sergio rossi と被るかな.
ホーガンのスニーカーが超カッコいい (P203).でも色が...


そこら中にベルベットジャケットが登場.今季一番の流行アイテム?
おいらもベルベットは大好きなのですが,GUCCI 02-03AW の黒いベルベットジャケット持ってるし (昨年のからさわぎで着たやつ),昨季のベルベットタキシードもあるしね.
先週試着したシルバーグレイのベルベットジャケットは自分には似合わなかったし,今季買い足すことはなさそう.
あとは... 特になかったような気のせいが.
とにかく重くて読むのがしんどい.以上.


月刊ザテレビジョン 11 月号

蛯原友里ちゃんの新連載スタート!!
連載のタイトルは「エビちゃん 芸能界 フレンド通信」.どうやらこの連載は毎回ゲストを呼んで対談するというものらしい.
月刊誌での連載ということで,友里ちゃんの文章力をちょっと心配していたのですが (失礼!!),これなら安心かな?


そんなわけで (どんなわけで?),初のゲストは篠原涼子.マキアージュつながりですね.
対談の内容は... 前半はお互い褒め殺し (笑).
ちょっと気になったところ.

篠原涼子:料理は作る?
友里ちゃん:まったく (笑).

あれ,そうだっけ?
以前スーパーニュースに優ちゃん・もえちゃんと一緒に出た時に得意料理を説明していましたけど.
こんなの.

友里:デッカイ牛肉をボフッと置いて,ゴボウのキンピラをパ〜ッてやって,スゴイおいしいんですけど,みんなに好評です.

(^^;
ページの半分は篠原涼子との 2 ショット写真.ソファに座ってるので友里ちゃんのスタイルのよさが活かされてない感じ.


ザテレビジョンの携帯サイトでも連載が始まりました.
これは誌面の方と連動した企画で,対談後の感想の他,「今月のお召しモノ」というコーナーがあって誌面の写真で友里ちゃんが着ている服が紹介されています.アプワイザー・リッシェのものらしい.
こっちは毎週更新とのことなので要チェック!!
っていうか,携帯にもアンテナが欲しいゾ!!


出演予定 TV 番組

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

山田優
09/26 (日) 深夜 00:30〜01:25 CX 「F1モデル日本GP初生SP!」
09/26 (日) 深夜 01:50〜03:50 CX 「F1世界選手権第17戦ブラジルグランプリ」

めでたく (?) 最終回を迎えてからわずか 1 か月... それなのに F1 モデルがあっさりと復活.(^^;
メンバーも同じみたいで優ちゃんの他に堀内葉子・滝沢沙織が出演.


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

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

CanCam から,お気に入りの蛯原友里ちゃんを紹介しようというこのコーナー.
今日は「発表! 秋のバカ売れ服 114」から P64 の友里ちゃん.
柔らかい笑顔がステキな友里ちゃんです♪
ちなみに MISCH MASCH のボレロツインを着ています.ミウさんが買えなかったやつ (笑).残念!!
そんなわけで (どんなわけで?),やっぱり CanCam 買うしか!!