Prolog 写経記 その 37 element/2
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
element/2
を写経します.解説
element(X, Set)
は要素X
が集合Set
に属するかどうか (メンバか否か) を調べたり,バックトラックを通じてSet
の各要素を返したりする.
ふむ.Java でいうと Set#contains(Object)
ですね.加えて iterator()
っぽくも使えるという.
モード
element(?, +).
ふむ.集合はちゃんと与えないといけないらしい.
定義
では,こいつの定義を写経しませう.
element(X, [X|_]). element(X, [_|Set]) :- element(X, Set).
ふむ.集合の最初の要素が X
か,残りの要素からなる集合のメンバーなら X
は集合のメンバーですよ,と.
注記
element/2
とリスト処理述語member/2
を比較してみよ.
らじゃあ.
そんなわけで (どんなわけで?),member/2
member(X, [X|_]). member(X, [_ | List]) :- member(X, List).
...
同じじゃん.
でもでも,member/2
のモードは member(?, ?)
なんだよね.どうして element/2
は element(?, +)
なんだろう?
っていうか,member/2
がどうして member(?, ?)
と言い張るのかが分からない...
例
では使用例を写経しませう.
6 ?- element(7, [3, 1, 5, 7, 4]). Yes 7 ?- element(7, [3, 1, 5, 6, 4]). No 8 ?- element(X, [q, r, s]). X = q ; X = r ; X = s Yes
ふむ.
特にどうという事もない感じ.
最近はこんなんばっかだなぁ.