Prolog 写経記 その 73 write_list_separated/3

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

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

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

今日は write_list_separated/3 を写経します.

解説

write_list_separated(List, Del, N)List の要素を現在の出力ストリームに書き出す.ココの要素は Del によって仕切られて出力され,N 個のブランクで字下げされた新しい行に出力される.

ふむ.

モード

write_list_separated(+, +, +).

ふむ.

定義

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

write_list_separated([], _, _) :- !.
write_list_separated([X], _, N) :- !,
	nl, tab(N),
	write(X).
write_list_separated([X | List], Del, N) :-
	nl, tab(N),
	write(X),
	write(Del),
	write_list_separated(List, Del, N).

最初の節は停止条件
次の節はリストの最後 (唯一) の要素を出力するもので,改行して N 個の字下げをして要素を出力してます.
最後の節はリストの先頭の要素を出力するもので,改行して N 個の字下げをして要素を出力して,残りの要素を再帰的に出力します.
またまたつまんね.

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

3 ?- write_list_separated([red, green, blue], ' ', 5).

     red 
     green 
     blue

Yes
4 ?- write('['),
write_list_separated(
[key(3, a), key(7, g), key(2, n)], ',', 3),
nl, write(']').
[ key(3, a), key(7, g), key(2, n) ] Yes

またまたつまんね.