-
Notifications
You must be signed in to change notification settings - Fork 2
/
ttvars.prolog
47 lines (39 loc) · 1000 Bytes
/
ttvars.prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
% -*- mode: prolog; coding: utf-8 -*-
% Simple util to make truth table.
% tested under gnu prolog and swi prolog.
% See: https://github.com/hkoba/mytools/wiki/ttvars
% ?- consult('ttvars.prolog').
% | ?- tt([[y,n], [y,n]], writeln).
% [y,y]
% [n,y]
% [y,n]
% [n,n]
%
% no
% | ?- tt([[y,n], [y,n], [y,n]], write_tsv).
% y y y
% n y y
% y n y
% n n y
% y y n
% n y n
% y n n
% n n n
%
% no
tt(List, Call) :-
tt_q(List, [], Call), fail.
tt_q([], Result, Call) :-
reverse(Result, Rev), call(Call, Rev).
tt_q([Hques|Tques], R, Call) :-
tt_ans(Hques, Tques, R, Call).
tt_ans([Hans|Tans], Tques, R, Call) :-
tt_q(Tques, [Hans | R], Call),
!,
(Tans = []; tt_ans(Tans, Tques, R, Call)).
writeln(X) :-
write(X), nl.
write_tsv([]) :-
nl, true.
write_tsv([H|T]) :-
write(H), (T = []; write('\t')), write_tsv(T).