Prolog 写経記 その 30 sublist/2
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
sublist/2
を写経します.解説
sublist(Sub, List)
はSub
がList
の部分リストであれば成功する.
ふむ.Java でいうと... List#sublist(int, int)
... はちょっと違うな.
String#contaians(CharSequence)
の方が近い感じ.
モード
sublist(+, +).
ふーん.第 1 引数を変数にしちゃダメなんだぁ.
定義
では,こいつの定義を写経しませう.
sublist(Sub, List) :- conc(S, _, List), conc(_, Sub, S), !.
まぁ,例によって例のごとく.
分けるのとくっつけるのは同じ事,みたいな.
最後にカットが付いてますね.これだとバックトラックが効かないから,引数に変数を渡すのはやっぱりダメって事ですか.
注記
部分リストの要素は,元のリストでの順序と同じ順序で並べられていなければならない.
らじゃあ.subset
じゃなくて sublist
だもんね.あるいは subsequence
みたいな.
例
では使用例を写経しませう.
3 ?- sublist([l, m], [i, j, k, l, m, n]). Yes 4 ?- sublist([a*b, c*d], [a*b, b*c, c*d]). No 5 ?- sublist([], []). Yes
ふむ.
念のため,第1引数に変数を渡してみます.
6 ?- sublist(S, [i, j, k, l, m, n]). S = [] ; No
やはり.カットが効いちゃってますね.
まぁ,よかろう.
っていうか,今日も手抜きっぽいなぁ.
簡単なやつはそろそろ日記ではスキップするとかした方がいいかも?