差分リストの練習 その3
差分リストといいつつ、lastはただのリストの練習だった。
last
my_last([_, Head | Rest], Result) :- my_last([Head | Rest], Result). my_last([Result | []], Result).
slices
split_at(N, [Lcar | Lcdr], [Lcar | F], R) :- N > 0, N1 is N - 1, split_at(N1, Lcdr, F, R), !. split_at(_, [], [], []). split_at(0, L, [], L). slices(List, N, Result) :- slices_sub(List, N, [Result, []]). slices_sub([], _, [Tail, Tail]). slices_sub(List, N, [Result, Tail]) :- split_at(N, List, Take, Drop), [Result, Appender1] = [[Take | Appender1], Appender2], slices_sub(Drop, N, [Appender2, Tail]), !.
あきた
差分リストの基本的な利用法は大体わかったと思う。で、もうリストの関数を書くのは飽きた。Prologでは高階関数が無いみたいなので(知らないだけ?)mapやfoldなどのリスト処理関数がかけないのも飽きる。
次に進もう。今度はPrologで作る数学の世界―Prologそして集合‐位相‐群を読む