Prolog 写経記 その 79 line_type/1

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

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

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

今日は line_type/1 を写経します.

解説

line_type(Type) は画面上の行の特性を決める.Typetopbottomnormal あるいは wide のうちの 1 つである.

ふーん.
おらいが使っているのは Windows 版の SWI-Prolog なんですが...
ちゃんと役に立つのでしょうか?
かなり微妙...
(こぴぺ)

モード

line_type(+)

ふむ.

定義

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

line_type(Type) :-
	line_code(Type, Code),
	escape(Code).

line_code(top, '#3') :- !.
line_code(bottom, '#4') :- !.
line_code(normal, '#5') :- !.
line_code(wide, '#6') :- !.

昨日の charset/1 なんかにもありましたが,この line_code/2 ってマップ (連想配列とか辞書とかハッシュとか呼ばれるやつ) ですよね.
こういう,ある種データのようなものがプログラムで直接表現されるのってどうなんでしょうね?
これみたいにマッピングが増えたり減ったりしないのはいいけど,実行時に追加されるようなケースではあんまりうれしくない感じ.
きっと Prologer は遠慮無く Prolog データベースへの追加削除をするんだろうけど.
個人的には気持ち悪い気がするのだけど,それを言い出すと (述語として表現される) 事実といわゆるデータの区別が分からなくなって来ちゃいます...

注意

Type は画面上にどのように文字を出力するかを定める.normal は通常の幅 (1 行に 80 文字) で文字を出力し,wide は 2 倍の幅(1 行に 40 文字)である.一方 topbottom は 2 倍の高さと 2 倍の幅の文字を出力するのに用いられる.top で上半分の,bottom で下半分の行を初期化する (下の例参照).選択されたタイプは行全体に有効である.

縦倍・横倍っすか!! 懐かしいなぁ.
でもでも,Windows 版の SWI-Prolog で動くのかは微妙...

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

write_enlarged(Text) :-
	nl, line_type(top),
	write(Text),
	nl, line_type(bottom),
	write(Text).

例によって述語が掲載されているだけなので,適当に使ってみます.

2 ?- write_enlarged('Yuri').

3Yuri
4Yuri

Yes

ぐはぁっ,普通にダメっぽい.