Prolog 写経記 その 34 tail/2

(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.

Prologユーティリティライブラリ

Prologユーティリティライブラリ

今日は tail/2 を写経します.

解説

tail(List, T)TList の尾部に具体化する.

リストの尾部ってのは 2 番目以降の要素からなるリストのこと.
なので,Java でいうと... list.sublist(1, list.size()) って感じか.

モード

tail(?, ?).

ふむ.

定義

では,こいつの定義を写経しませう.

tail([_ | T], T).

お揃の head/2 同様,なくても大して困らさそうなくらいの単純さ.

注記

tail/2 は空リストに適用された場合,失敗する.この述語は,他の処理で完全に具体化されるようなリストを,部分的に具体化するのに用いることもできる (最後の例参照).

head/2 に書いてあったことと同じ〜.

では使用例を写経しませう.

3 ?- tail([a, b, c, d], T).

T = [b, c, d] 

Yes
4 ?- tail([1], X).

X = [] 

Yes
5 ?- tail([], Empty).

No
6 ?- tail(L, [8, 1, 5]), head(L, 0).

L = [0, 8, 1, 5] 

Yes

ふむ.
特にどうという事もなく.まぁ,head/2 と同じようなものだしね.


これで「1 章 リスト処理」は終了です.1か月半ほどかかりました.結構長いなぁ.
でもでも,まだ半分にも達してないんですよね.年内に終われる... のか?
まぁ,ゆっくり気長にいきませう.