差分リストの練習 その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そして集合‐位相‐群を読む