Prolog 写経記 その 27 split/4
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
split/4
を写経します.解説
split(X, List, List1, List2)
はList2
の最初の要素がX
になるようList
をList1
とList2
の 2 つの部分リストに分割する.
ふむ.Java でいうと... そのまんまはないような...
モード
split(?, ?, ?, ?)
お,久しぶりに全部入出力どっちでも可.
といっても,全ての変数を具体化しないで呼び出せるわけではないと思いますが.
定義
では,こいつの定義を写経しませう.
split(X, List, List1, List2) :- conc(List1, [X | L], List), conc([X], L, List2).
...
またこのパターンかぁ.
いったい何度目になるんだろう?
ともあれ (JW),List
を X
とその左にある要素のリスト(List1
)と右にある要素のリスト(L
)の3つに分けて以下同文,見たいな.
まぁ,見慣れたからといって使えるようになったとは言えませんが.
注記
split/4
はList1
と空でないList2
を結合するために用いてもよい (3番目の例参照).
らじゃあ.
例
では使用例を写経しませう.
3 ?- split(b, [a, b, c, d], L1, L2). L1 = [a] L2 = [b, c, d] Yes 4 ?- split(_, [a, b, c, d], L1, L2). L1 = [] L2 = [a, b, c, d] ; L1 = [a] L2 = [b, c, d] ; L1 = [a, b] L2 = [c, d] ; L1 = [a, b, c] L2 = [d] ; No 5 ?- split(_, X, [3, 8, 1, 5], [2, 4, 1]). X = [3, 8, 1, 5, 2, 4, 1] Yes 6 ?- split(_, L, [a1, a2], []). No
ふむ.
まぁ,どうという事もない感じ.