Prolog 写経記 その 29 split_n/4
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
split_n/4
を写経します.解説
split_n(N, List, List1, List2)
はList
のN
番目の要素がList2
の先頭の要素になるようListをList1
とList2
の 2 つの部分リストに分割する.
ふむ.
モード
split_n(?, +, ?, ?)
ふむふむ.
定義
では,こいつの定義を写経しませう.
split_n(N, List, List1, List2) :- conc(List1, List2, List), length(List1, L), N is L + 1.
ふむふむふむ.
リストの分割といえば conc/3
のお世話になるのがお約束.
List1
と List2
をくっつけたのが List
で,List1
の長さに 1 加えたのが N
だよ,と.
length(List1, L)
と N is L + 1
の順番重要.逆だと引数で N
を具体化しなかった場合にぐはぁっ.
例
では使用例を写経しませう.
2 ?- split_n(4, [a, b, c, d], L1, L2). L1 = [a, b, c] L2 = [d] Yes 3 ?- split_n(P, [a, b, c, d], [a, b], [c, d]). P = 3 Yes 4 ?- split_n(_, [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] ; L1 = [a, b, c, d] L2 = [] ; No
ふむふむふむふむ.
特にどうという事もない... よね.
なんか手抜きっぽいけどこんなもんだ.