Prolog 写経記 その 77 cursor/2

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

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

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

続けて cursor/2 を写経します.

解説

cursor(Y, X) は,YX をそれぞれ行と列を表す整数としてカーソルの是立ち位置を与える.
cursor(Direction, Amount) はカーソルを相対位置に移動させる.Directionleftrightup あるいは down のいずれか 1 つであり,Amount は整数である.

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

モード

cursor(+, +)

ふむ.

定義

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

cursor(Y, X) :-
	integer(Y), !,
	escape(Y, X, 'f').
cursor(Direction, Amount) :-
	cursor_code(Direction, Code),
	escape(Amount, Code).

cursor_code(left, 'D') :- !.
cursor_code(right, 'C') :- !.
cursor_code(up, 'A') :- !.
cursor_code(down, 'B').

つまんね.

注記

cursor/2 はカーソルの位置を決める 2 通りの方法を提供している.どちらの方法を使うかは最初の引数のタイプによっている.整数の場合は絶対位置を与える述語,leftrightupdown の場合は相対位置を与える述語となる.画面の左上隅は座標 (1, 1) で,右下隅は (24, 80) になっている.

あぁ,80×25 な端末ってありましたね.メインフレーム時代にはお世話になりっぱなしでしたよ.
でもでも,もう時代が違いますよ?

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

cursor_home :-
	cursor(1, 1).

cursor/2 を使った述語の定義のみ.
試しに使ってみますか.

4 ?- cursor_home.
1f

Yes

予想通り.(^^;
制御コードが文字として表示されて終わりです.だめじゃん...