Prolog 写経記 その 42 list_to_set/2
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
list_to_set/2
を写経します.解説
list_to_set(List, Set)
はリストList
をその中の重複する要素を削除することで集合Set
に変換する.
ふむ.Java でいうと HashSet#
みたいな.
モード
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
を集合にした結果である Set
に X
が含まれていれば Set
が結果ですよ,と.
そして Set
に X
が含まれていなければ X
と Set
の cons が結果ですよ,と.
ふーん.なんか非効率的な気がするんですけど.
X
が Set
に含まれていない場合,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 を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
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
の要素でかつ,Sub
が Set
の部分集合なら真ということですね.
普通っぽい.
注記
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 ショット写真.ソファに座ってるので友里ちゃんのスタイルのよさが活かされてない感じ.
ザテレビジョンの携帯サイトでも連載が始まりました.
これは誌面の方と連動した企画で,対談後の感想の他,「今月のお召しモノ」というコーナーがあって誌面の写真で友里ちゃんが着ている服が紹介されています.アプワイザー・リッシェのものらしい.
こっちは毎週更新とのことなので要チェック!!
っていうか,携帯にもアンテナが欲しいゾ!!